Iš internet of things kategorijos. Kaip pasidaryti termometrą, kuris būtų pasiekiamas per internetą iš bet kur? Mano sprendimas:
kaip pagrindinę sistemą ir ‘smegenis’ naudoju Carambola2, o termosensorius yra DS1820 su 1-wire sąsaja.

Carambola2

DS1820
Carambola2 OpenWRT firmware source failus parsisiunčiam iš Git repozitorijos:
git clone https://github.com/8devices/carambola2
atnaujinam feeds :
./scripts/feeds update -a ./scripts/feeds install -a
Atsikopijuojam carambola2 konfigą:
cp config_minimal .config
Tuomet pasileidžiam:
make menuconfig
Ten prisidedam PHP5, lighttpd palaikymą (uždedam žvaigždutę ties tomis opcijomis ir išsaugom konfigą):
Languages PHP php5 php5-fastcgi php5-mod-json php5-mod-sockets
Network Web Servers/Proxies lighttpd lighttpd-mod-cgi lighttpd-mod-fastcgi lighttpd-mod-simple-vhost
Taip pat pažymim:
Kernel modules Web Servers/Proxies W1 Support kmod-w1-gpio-custom kmod-w1-slave-therm
Išsaugom konfigą ir padarom:
make defconfig
Buildinam image:
make -j4
Įkeliam į carambola2:
scp bin/ar71xx/openwrt-8devices-v2.9-ar71xx-generic-carambola2-squashfs-sysupgrade.bin root@192.168.1.1:/tmp
Įrašome firmware:
sysupgrade -n /tmp/openwrt-8devices-v2.9-ar71xx-generic-carambola2-squashfs-sysupgrade.bin
Susirašo firmware. Užsikrauna carambola2 ir su ps komanda matom uhttpd procesą:
1038 root 1504 S /usr/sbin/uhttpd -f -h /www -r Carambola2 -x /cgi-bin
/etc/php.ini faile doc_root turi būti tuščias, tam kad veiktų uhttpd home kintamasis.
doc_root = ""
/etc/config/uhttpd faile į main sekciją įdedam eilutę:
list interpreter ".php=/usr/bin/php-cgi"
/etc/config/firewall faile wan sekcija turi atrodyti šitaip:
config zone
option name wan
list network ‘wan’
list network ‘wan6’
option input ACCEPT
option output ACCEPT
option forward REJECT
option masq 1
option mtu_fix 1
Perkraunam servisus:
/etc/init.d/uhttpd restart /etc/init.d/firewall restart
Pasileidžiam kernelio modulį, naudosim 23 GPIO Carambola2 piną:
insmod w1-gpio-custom bus1=0,23,0
Sujungiam daviklį su Carambola2, taip pat naudojau 4.7K pullup rezistorių tarp DQ ir VDD daviklio pinų.
Carambola2 pin | DS1820 pin |
GPIO23 | DQ |
GND | GND |
+3V | VDD |
Jei viskas gerai, matom temperatūrą:
root@Carambola2:/# cat /sys/devices/w1_bus_master1/10-0008031e4862/w1_slave 2b 00 4b 46 ff ff 02 10 8a : crc=8a YES 2b 00 4b 46 ff ff 02 10 8a t=21625
Sudedam komandą, kuri filtruoja rezultatą į bash skriptą (reikia pasikeisti atitinkamai direktoriją), pasidedam į /www/temp.sh:
cat /sys/devices/w1_bus_master1/10-0008031e4862/w1_slave | tail -n 1 | awk 'NF>1{print $NF}'
Panaudojam paprastą PHP skriptą , pasidedam į /www/index.php:
<?php if ($_POST['temp']==2) { exec("/www/temp.sh", $output, $return); echo "Temperatura: "; print_r($output[0]); } ?> <form method="post"> <input type="hidden" name="temp" value="2"> <input type="hidden" name="initialized" value="1"> <input type="submit" name="submit" value="Atnaujinti"><br> </form>
Dabar iš tinklo bus galima tikrinti temperatūros parodymus:
Naudota info iš interneto:
https://f.zz.de/posts/201411091405.1_wire_am_carambola2/
http://www.8devices.com/wiki/carambola:2:gettingstarted
http://www.8devices.com/wiki/carambola:1:demo_projects:led_from_web_page