Egy hőmérséklet- és páratartalommérő készüléket építettem iMX233-OLinuXino-MAXI kártyával. Fő előnyei:
-
a mért adatok áttölthetők WiFi-n (esetleg 3G modemen) keresztül
-
távolról menedzselhető SSH-val
-
kis fogyasztás: kb. 5W
A fejlesztőkártyát a http://monosx.hu biztosította.
Én egy kész Linux disztribúciót telepítettem az OLinuXino kártyára, az Arch Linux ARM-ot. Az kezdjen neki a műveleteknek, aki legalább felhasználói szinten tud használni Linux konzolt, tudja mi add
, ls
, iwconfig
, ifconfig
parancs.
Az Arch Linux ARM a disztribúcióhoz egy 2GB-os micro SD kártyára lesz szükség! A jelenleg letölthető képfájl csak 2 GB-os kártyákkal működik: partíciós táblát és három partíciót is tartalmaz az image. Ezt a képfájlt a következő parancsokkal tudjuk letölteni és az SD kártyára másolni egy Linux PC-n:
wget http://archlinuxarm.org/os/ArchLinuxARM-olinuxino-latest.img.gz
gunzip ArchLinuxARM-olinuxino-latest.img.gz
dd if=ArchLinuxARM-olinuxino-latest.img of=/dev/sdX
sync
A /dev/sdX helyett a kártyánkhoz tartozó eszközfájlt adjuk meg: miután a kártyaolvasóba helyeztük a kártyát, a dmesg parancs kimenetében megtalálhatjuk az eszköz nevét. Figyeljünk, mert ha rossz eszköznevet írunk be, letörölhetjük a vincseszterünk vagy más adathordozónk tartalmát!
Az alábbi példában a keresett eszköz neve /dev/sdb:
[ 1551.825963] scsi3 : usb-storage 2-7:1.0
[ 1552.833373] scsi 3:0:0:0: Direct-Access Generic- Multi-Card 1.00 PQ: 0 ANSI: 0 CCS
[ 1553.429647] sd 3:0:0:0: [sdb] 3970048 512-byte logical blocks: (2.03 GB/1.89 GiB)
[ 1553.430730] sd 3:0:0:0: [sdb] Write Protect is off
[ 1553.430746] sd 3:0:0:0: [sdb] Mode Sense: 03 00 00 00
[ 1553.431857] sd 3:0:0:0: [sdb] No Caching mode page present
[ 1553.431875] sd 3:0:0:0: [sdb] Assuming drive cache: write through
[ 1553.438018] sd 3:0:0:0: [sdb] No Caching mode page present
[ 1553.438034] sd 3:0:0:0: [sdb] Assuming drive cache: write through
[ 1553.673672] sdb: sdb1
[ 1553.678468] sd 3:0:0:0: [sdb] No Caching mode page present
[ 1553.678482] sd 3:0:0:0: [sdb] Assuming drive cache: write through
[ 1553.678494] sd 3:0:0:0: [sdb] Attached SCSI removable disk
Az SD kártyát tegyük az OLinuXino foglalatába, majd kapcsoljuk be a tápfeszültséget. Az U_DEBUG porton keresztül figyelhetjük a boot folyamatát, majd ezután aroot
felhasználónévvel és root
jelszóval
léphetünk be a rendszerbe.
Ha csatlakoztattunk egy ethernet kábelt, az ifconfig
paranccsal
ellenőrizhetjük, hogy a DHCP szervertől kapott-e IP címet:
[root@alarm \~]# ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.5.250 netmask 255.255.255.0 broadcast 192.168.5.255
inet6 fe80::ac82:21ff:feec:92e prefixlen 64 scopeid 0x20
ether ae:82:21:ec:09:2e txqueuelen 1000 (Ethernet)
RX packets 17 bytes 2243 (2.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 26 bytes 2622 (2.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
A 192.168.5.250-es címet kaptuk. A pacman -Syu
paranccsal
frissíthetjük rendszerünket a legújabb alkalmazásokra.
Állítsuk be az időzónát (ezt és az ntpd, sshd beállítását csak egyszer kell elvégezni):
timedatectl set-timezone Europe/Budapest
Ha állandó internetkapcsolata lesz az eszköznek, érdemes egy időszerverhez szinkronizálni:
systemctl enable ntpd
systemctl start ntpd
SSH szerver engedélyezése és elindítása (a legutóbbi, 2014.04.12-én letölthető image-nél már engedélyezve van az ssh):
systemctl enable sshd
systemctl start sshd
Ezután egy másik gépről bejelentkezhetünk az OLinuXino-ba:
ivanovp@titan ivanovp> ssh root@192.168.5.250
The authenticity of host '192.168.5.250 (192.168.5.250)' can't be established.
ECDSA key fingerprint is b4:d0:99:aa:3a:ab:81:12:f1:27:4b:21:e4:fe:09:76.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.5.250' (ECDSA) to the list of known hosts.
root@192.168.5.250's password:
X11 forwarding request failed on channel 0
Last login: Thu Jan 1 01:27:00 1970
[root@alarm \~]#
WLAN kapcsolat felépítéséhez a wireless_tools és wpa_supplicant csomagokra lesz szükség (a legutóbbi, 2014.04.12-én letölthető image-nél már ezek fel vannak telepítve):
pacman -S wireless_tools wpa_supplicant dialog
Egy USB-s WiFi adapter csatlakoztatása után valami hasonlót kell látnunk
az iwconfig
parancs kiadása után:
[root@alarm \~]# iwconfig
lo no wireless extensions.
wlan0 IEEE 802.11bg ESSID:off/anyMode:Managed Access Point: Not-Associated Tx-Power=0 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
eth0 no wireless extensions. [root@alarm \~]# wpa_passphrase Pelda Jelszo123network={
ssid="Pelda"
#psk="Jelszo123"
psk=eb3123a9475d62371230611b8b3010e3c9d41c7cc59487138bffa94a0106539f
}
[root@alarm \~]# wpa_passphrase Pelda Jelszo123>/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
[root@alarm \~]# systemctl enable dhcpcd
ln -s '/usr/lib/systemd/system/dhcpcd.service' '/etc/systemd/system/multi-user.target.wants/dhcpcd.service'
[root@alarm \~]# systemctl start dhcpcd
[root@alarm \~]# systemctl enable wpa_supplicant@wlan0
ln -s '/usr/lib/systemd/system/wpa_supplicant@.service' '/etc/systemd/system/multi-user.target.wants/wpa_supplicant@wlan0.service'
[root@alarm \~]# systemctl start wpa_supplicant@wlan0
-->
A netctl nevű program segít az ethernet/WiFi kapcsolatok felépítésében.
A wlan0 interfészhez a /etc/netctl/wlan0
fájlt kell kitöltenünk. A
wifi-menu -o
paranncsal egyszerűen elkészíthetjük a fájlt. Nálam kb.
így néz ki:
Description='A simple WPA encrypted wireless connection'
Interface=wlan0
Connection=wireless
Security=wpa
IP=dhcp ESSID='Valami'# Prepend hexadecimal keys with \"
# If your key starts with ", write it as '"""'
# See also: the section on special quoting rules in netctl.profile(5)
Key='Jelszo'
# Uncomment this if your ssid is hidden
#Hidden=yes
ExecUpPost='iwconfig wlan0 power off || /usr/bin/ntpd -gq || true'Amennyiben a kapcsolat bizonytalan, gyakran megszakad, a power management-et érdemes kikapcsolni:
iwconfig wlan0 power off
Ez utóbbi parancs az ExecUpPost sorban szerepel. Ha jól állítottuk be a jelszót és megfelelő a jelerősség, ilyesmit kell látnunk (Mode:Managed a lényeg, az Encryption key:off pedig a WEP-re vonatkozik):
[root@alarm wpa_supplicant]# iwconfig wlan0
wlan0 IEEE 802.11bg ESSID:"Szil"
Mode:Managed Frequency:2.442 GHz Access Point: 00:18:39:C0:53:5C
Bit Rate=9 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=44/70 Signal level=-66 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:11 Missed beacon:0
A példa adatgyűjtő rendszerben egy USB-s eszköz méri a hőmérsékletet és a páratartalmat és egy virtuális soros porton keresztül lehet lekérdezni az adatokat. Python script nyelven írtam meg az adatgyűjtő programot. Ezért kell telepítenünk a python2 és python2-pyserial csomagokat:
pacman -S python2-pyserial
Hozzáadok egy hagyományos felhasználót:[root@alarm \~]# cd /home/
[root@alarm home]# useradd ivanovp
[root@alarm home]# ls -l
total 0
[root@alarm home]# mkdir ivanovp
[root@alarm home]# chown ivanovp:ivanovp /home/ivanovp
[root@alarm home]# ls -l
total 4
drwxr-xr-x 2 ivanovp ivanovp 4096 Aug 27 18:23 ivanovp
[root@alarm home]# passwd ivanovp
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Majd egy másik gépről átmásolom a sensors.py programot és kipróbálom (ez nyilvánvalóan csak nálam fog működni, mert ebből a hőmérőből csak egy létezik, de kiindulási alapnak használható):
ivanovp@titan test> scp sensors.py ivanovp@192.168.5.250:
ivanovp@192.168.5.250's password:
sensors.py
ivanovp@titan ivanovp> ssh 192.168.5.250
ivanovp@192.168.5.250's password:
X11 forwarding request failed on channel 0
[ivanovp@alarm \~]\$ ls
sensors.py
[ivanovp@alarm \~]\$ ls -l
total 4
-rwxr-xr-x 1 ivanovp ivanovp 3737 Aug 27 18:25 sensors.py
[ivanovp@alarm \~]\$ chmod +x sensors.py
[ivanovp@alarm \~]\$ ./sensors.py
could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'
A /dev/ttyACM0 lenne a virtuális soros port eszközfájlja. Az eszköz megnyitásához az ivanovp felhasználónak az uucp csoport tagjának kell lennie. Az USB-s hőmérő csatlakoztatása után meg tudja nyitni a device-t és a beolvasott sorokat a sensors.log-ba írja:
[ivanovp@alarm \~]\$ ./sensors.py
[ivanovp@alarm \~]\$ ls
sensors.log sensors.py
[ivanovp@alarm \~]\$ cat sensors.log
2013-08-27 18:54:30 TMP122: 25.0000 C DHT11: 23.0 C 57%
Azért, hogy a script percenként lefusson a crontabba a crontab -e
paranncsal a következőket írom:
# m h dom mon dow command
*/1 * * * * /home/ivanovp/sensors.py
A cron szolgáltatás engedélyezéséhez systemctl enable cronie
parancs
futtatása szükséges.
{width="320"
height="273"}
{width="320"
height="273"}