Feed on
Posts
Comments

Github’e radau hd44780 draiverį https://github.com/brnt/openwrt-hd44780 . Parsisiunčiam su git clone ir pasidedam prie Carambola2 packages:

git clone https://github.com/brnt/openwrt-hd44780.git

cp -r openwrt-hd44780/ carambola2/packages

pasikeičiam gpio pin konfigūraciją pagal save, aš naudojau taip:

vim package/openwrt-hd44780/src/hd44780.c
#define HD_RS 15
#define HD_RW 18 // not used if LCD is write-only (typical)
#define HD_E 19
#define HD_DB4 20
#define HD_DB5 21
#define HD_DB6 22
#define HD_DB7 23

Galime buildinti kartu su firmware image, kai įjungiam per make menuconfig,  bet greičiau ir paprasčiau buildinti atskirai ir po to įsirašyti su opkg

make package/openwrt-hd44780/compile

scp bin/ar71xx/packages/kernel/kmod-hd44780_4.1.23+0.1-2_ar71xx.ipk root@192.168.1.1:/tmp

Ir jau ant pačio Carambola2 devaiso:

opkg install /tmp/kmod-hd44780_4.1.23+0.1-2_ar71xx.ipk

Carambola2 kernelio moduliai greičiausiai naudos tuos pačius pinus kitoms funkcijoms ir hd44780 modulis neveiks ir luš. Man reikėjo pašalinti i2c_gpio_custom modulį, tada atsilaisvino gpio pinai ir viskas pradėjo veikti be lūžimų.

rmmod i2c_gpio_custom
rm /etc/modules.d/50-i2c-gpio-custom

Pažiūrim, kam naudojami gpio pinai Caramboloje.

root@Carambola2:/# cat /sys/kernel/debug/gpio
GPIOs 0-29, ath79:
gpio-0 (carambola2:green:wla) out hi
gpio-11 (jumpstart button ) in hi
gpio-13 (carambola2:orange:et) out lo
gpio-14 (carambola2:orange:et) out lo
gpio-15 (HD44780_RS ) out hi
gpio-18 (HD44780_RW ) out lo
gpio-19 (HD44780_E ) out hi
gpio-20 (HD44780_DB4 ) out lo
gpio-21 (HD44780_DB5 ) out hi
gpio-22 (HD44780_DB6 ) out hi
gpio-23 (HD44780_DB7 ) out lo

Visa info, kaip naudoti hd44780 draiverį yra autoriaus github puslapyje.
Naudota info iš interneto:
https://wiki.openwrt.org/toh/8devices/carambola2

https://github.com/brnt/openwrt-hd44780

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

Carambola2

 

DS1820

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

https://wiki.openwrt.org/doc/uci/uhttpd

Darbe ir namie (greta Windows) naudoju Linux OS, Ubuntu ir Debian. Retais atvejais (bet nutinka) kažkokiais būdais sugadinu OS ir tenka perrašyti OS iš naujo. Nusprendžiau apsidrausti nuo tokių nelaimingų atvejų ir darytis reguliarius backupus.
Padaręs minimalią paiešką internete, radau zbackup programą. Kas patiko, pagrindinės galimybės, funkcijos:
pagal nutylėjimą zbackup naudoja LZMA suspaudimo formatą, sumažina backupų dydį
dar labiau užimamą vietą taupo deduplication , kai naujas backup panaudoja senesnio backup info ir išsaugo tik tai, kas atsirado naujo.
daug neužimantis package ir neturi daug dependencies

Įrašymas
Įrašom Ubuntu/Debian sistemoje:
sudo apt-get update

sudo apt-get install zbackup

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libprotobuf9
The following NEW packages will be installed:
libprotobuf9 zbackup
0 upgraded, 2 newly installed, 0 to remove and 55 not upgraded.
Need to get 400 kB of archives.
After this operation, 1,153 kB of additional disk space will be used.
Do you want to continue? [Y/n]

Inicializavimas
Tuomet reikia inicializuoti backup direktoriją:
zbackup --init
Toje direktorijoje galėsime saugoti backupus.
Toliau reikia pagalvoti, ką norėsime saugoti. Aš pradžiai pasirinkau svarbiausių programų nustatymus ir duomenis, vėliau sąrašą plėsiu:
tar -P -c /etc/hosts /etc/minicom/minirc.u0 /home/tester/.local/share/tomboy/ /home/tester/.icedove/ /home/tester/.purple/ /home/tester/.vimrc /home/tester/.ssh/ /home/tester/.bashrc /home/tester/.bash_history /home/tester/.mozilla/ | zbackup backup backups/failopavadinimas
čia failopavadinimas turi būti toje direktorijoje, kurioje paleidome zbackup –init komandą.
Pirmasis kartas darant atsarginę kopiją truko ilgiau (10-20 minučių), kiti backup vyks žymiai greičiau, 1-2 minutes. Taip pat paskesni backupai naudoja mažiau atminties kietajame diske nei pirmasis backupas.
Pavyzdžiui skirtumas tarp 5 ir 6 backupo:

tester@tester:~$ du -hs /mnt/exchange/users/Arvydas/zbackup/
1.3G /mnt/exchange/users/Arvydas/zbackup/
tester@tester:~$ du -hs /mnt/exchange/users/Arvydas/zbackup/
1.4G /mnt/exchange/users/Arvydas/zbackup/

Matom, kad backup failų dydis ženkliai neauga su kiekvienu nauju backupu.

Atstatymas iš backup failų
Kitas ir paskutinis žingsnis, kai jau turime išsisaugoję backup yra jo atkūrimas (restore).
Darant restore, failus išarchyvuos su tais pačiais keliais (path), kokius jie turėjo, tai mano backup galima atkurti / direktorijoje.
Pasirenkam kokį backup norim atkurti iš backups direktorijos.

Tačiau atsargumo dėlei savo backup išsiarchyvavau kitoje direktorijoje ir backup failus atstatinėjau rankomis atskirai po vieną.
Taip pat Debian veikė ši komanda,
zbackup restore /home/tester/zbackup/backups/201608281219zbackup | tar -x
o Kubuntu ji metė klaidą apie username ir password, todėl reikia naudoti šitą:
zbackup restore --non-encrypted /home/tester/zbackup/backups/201608281219zbackup | tar -x

Tags:

Problema: reikia paleisti komandą sudo ifconfig eth0 down Kiekvieną kartą, kai įsijungiu kompą ir pasileidžiu Ubuntu Linux. Sprendimas turėtų būti kitoks, reiktų aiškintis, kodėl užklausos į internetą route’inamos į eth0 interfeisą, o ne į wlan0 ir panašiai. Tačiau kaip laikinas workaround’as bus crontab panaudojimas tos komandos paleidimui kaskart įsijungus Ubuntu.
Dabar problema, kaip paleisti komandą root teisėmis crontab’e.
Kaip rašo forumuose naudoti sudo paprasto vartotojo crontab’e yra nepatartina. Todėl naudoju root user’io crontab. sudo crontab -e Atidaro root vartotojo crontab’ą. Ten pridedu eilutę: ifconfig eth0 down Perkraunu kompą, komanda nepaleidžiama, nežinau, kodėl.
Todėl pabandžiau paieškoti linux log’uose ko nors apie crontab veiklą.
dmesg | grep -i cron
dmesg’e jokios info apie crontab nelogg’inama.
Pasigoogl’inau ir radau, kad reikalingi log’ai yra /var/log/syslog. cat /var/log/messages | grep cron

Sep 20 11:57:52 Ubuntu anacron[5254]: Job `cron.daily' terminated
Sep 20 11:57:52 Ubuntu anacron[5254]: Normal exit (1 job run)
Sep 20 12:13:32 Ubuntu anacron[25787]: Anacron 2.3 started on 2015-09-20
Sep 20 12:13:32 Ubuntu anacron[25787]: Normal exit (0 jobs run)
Sep 20 12:24:45 Ubuntu anacron[26096]: Anacron 2.3 started on 2015-09-20
Sep 20 12:24:45 Ubuntu anacron[26096]: Normal exit (0 jobs run)
Sep 20 12:24:45 Ubuntu anacron[26152]: Anacron 2.3 started on 2015-09-20
Sep 20 12:24:45 Ubuntu anacron[26152]: Normal exit (0 jobs run)
Sep 20 13:17:02 Ubuntu CRON[26437]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Sep 20 14:02:44 Ubuntu crontab[28275]: (root) BEGIN EDIT (root)
Sep 20 14:03:43 Ubuntu crontab[28275]: (root) REPLACE (root)
Sep 20 14:03:43 Ubuntu crontab[28275]: (root) END EDIT (root)
Sep 20 14:05:01 Ubuntu anacron[1016]: Anacron 2.3 started on 2015-09-20
Sep 20 14:05:01 Ubuntu cron[965]: (CRON) INFO (pidfile fd = 3)
Sep 20 14:05:01 Ubuntu anacron[1016]: Normal exit (0 jobs run)
Sep 20 14:05:01 Ubuntu cron[1071]: (CRON) STARTUP (fork ok)
Sep 20 14:05:01 Ubuntu cron[1071]: (CRON) INFO (Running @reboot jobs)
Sep 20 14:05:01 Ubuntu CRON[1115]: (root) CMD (ifconfig eth0 down)
Sep 20 14:05:01 Ubuntu CRON[1097]: (CRON) info (No MTA installed, discarding output)
Sep 20 14:05:11 Ubuntu anacron[1870]: Anacron 2.3 started on 2015-09-20
Sep 20 14:05:11 Ubuntu anacron[1870]: Normal exit (0 jobs run)
Matau, kad komanda vykdoma, bet, kodėl ji nesuveikia. Log’e matau, pranešimą, kad (CRON) info (No MTA installed, discarding output) Pasigoogl’inu, kas yra MTA.
MTAmessage transfer agent, yra naudojamas išsiųsti tokius log’us į elektroninį paštą. Forumuose rašo, kad mano naudojama Ubuntu OS neturi tokio mail serviso įrašyto by default.
Įsirašau forumuose pasiūlytą package’ą. sudo aptitude install postfix Instaliacijos metu paprašo pasirinkti vieną iš variantų, kur bus siunčiamas mail’as.
Pasirenku local.
Perkraunu kompą, žiūriu į /var/log/messages, matau tą patį, išskyrus, kad neberodo pranešimo dėl MTA.
Dabar, kai jau turim MTA agentą, postfix įrašytą, tai galime pažiūrėti ir kas buvo išsiųsta paštu. sudo tail /var/mail/root

Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
Message-Id:
Date: Sun, 20 Sep 2015 14:56:24 +0300 (EEST)

/bin/sh: 1: ifconfig: not found (prieš tai nebuvo tokios direktorijos /var/mail/root, ji atsirado, tik suinstaliavus postfix ir kai atsirado pirmasis mail pranešimas, kurį jis atsiuntė į šią direktoriją).
Matom, kad ifconfig: not found.
Pasigooglinam sprendimą, randam, kad reikia naudoti /sbin/ifconfig. Pataisom crontab įrašą:/sbin/ifconfig eth0 down Perkraunam kompą. Valio, veikia. /var/log/messages įrašai nepasikeitę, /var/mail/root naujų pranešimų nerasta, tai reiškia, kad komanda buvo įvykdyta, komandos output’o nebuvo, taip pat ir klaidos pranešimų nebuvo.

Tags: ,

Popo.lt tinklaraščiai. Hosting powered by   serverių hostingas - Hostex
Skip to toolbar