Differenze tra le versioni di "Gruppo Meteo/HowToOld"
Riga 210: | Riga 210: | ||
{| | {| | ||
| rtc connettore P2 || arduino mega | | rtc connettore P2 || arduino mega | ||
− | | | + | |- |
| gnd || gnd | | gnd || gnd | ||
|- | |- |
Versione delle 21:08, 28 lug 2014
da completare !
Quindi cosa funziona ora:
Sensoristica:
* per ora sono funzionanti i driver per due sensori di temperatura i2c * sono gestibili sensori con misurazioni di più parametri
protocollo invio dati:
* interrogazione dei sensori con jsonrpc * comandi modalità attuatore con jsonrpc * mqtt su ethernet con ethernet shield e enc28j60
gestione time:
* gestione time con rtc su i2c * ntp su ethernet
configurazione: sono configurabili runtime:
* i sensori installati, il loro indirizzo i2c e i loro metadati * il root path mqtt * il server mqtt * il server ntp * la frequenza di campionamento per mqtt * la data e l'ora per rtc se assente ntp
i parametri sono salvati permanentemente su eeprom
Funzionamento generale: all'accesione viene verificata la presenza di una configurazione di versione corrispondente al firmware, si configura la rete con dhcp, si interroga ntp server e si sincronizza l'orologio; se presente rtc viene impostato il time su rtc. Ci si connette al broker mqtt e tramite una temporizzazione di Alarm vengono inviati ogni sampletime i dati al broker. Contemporaneamente è possibile colloquiare su porta seriale tramite jsonrpc configurando, interrogando i sensori o attivando attuatori. Il sistema dovrebbe essere fault tollerant a: fault del ntp server (con caduta su rtc) fault del brocker mqtt (con riconnessione) rinnovo periodico dei dati del dhcp
Sensori
Utilizzeremo per cominciare sensori I2C. Oltre alla versatitilità e ampia diffusione di questo bus su Raspberry la gestione di i2c e' fatta a livello hardware e non comporta carichi rilevanti per la cpu.
Iniziamo misurando la temperatura.
La sensoristica prevede sue sensori di temperatura i2c della serie tmp della TEXAS INSTRUMENTS nello specifico tmp102 o tmp275 e uno Analog Device.
- Dato che il sensore tmp102 e' di tipo smd si puo' acqusitare anche gia' saldato su basetta lo vende ad esempio sparkfun; questi i dati del tmp27 http://www.ti.com/lit/ds/symlink/tmp275.pdf
- ADT7420 un sensore di precisione anche questo smd e prodotto da Analog; anche questo disponibile su basetta, ma un po' costosa: http://au.element14.com/digilent/pmodtmp2/adt7420-temp-sensor-16bit-pmod/dp/2290114
se avete la breakout board per tmp102 seguite le conessioni mostrate in:
http://bildr.org/2011/01/tmp102-arduino/
(l'esempio software è pero' un po' approssimativo)
c'è anche questo https://github.com/tz1/sparkfun/blob/master/i2cperiph/tmp102.c
Base board
Hardware
- Un esempio di misura della temperatura con sensore TMP102 sul sito element14, in questo esempio viene anche interfacciato un chip DS1307 real time clock utile se c'e' la possibilita' perdita di connettvita' verso un server ntp.
- questo un altro how to http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c
- questo un esempio di collegamento http://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/wiring-the-rtc
Software
per scaricare il software r.map:
mkdir ~/svn cd ~/svn svn checkout svn://svn.code.sf.net/p/r-map/code/ r-map-code
su raspberry:
cd ~/svn/r-map-code/trunk/python
Modificare latitudine e longitude nello script station.py inserendo quelle della propria stazione :
lon=11.86992 lat=44.98906
Modificare anche gli indirizzi i2c dei vostri sensori
rpcaddress=0x4f i2caddress=0x4c
Se avete dubbi potete controllare se il sensore viene visto sul bus i2c
i2cdetect -y 1 i2cdetect -y 0
Se avete trovato questa pagina cercando gli errori qui sotto, avete il sensore non collegato correttamente o l'indirizzo sbagliato sul bus I2C.
Per controllare usate i2cdetect come sopra.
[rmap@pidora python]$ python station.py terminated with error Traceback (most recent call last): File "station.py", line 54, in <module> t=i2c.tmp(address=i2caddress) File "/home/rmap/svn/r-map-code/trunk/python/i2c.py", line 31, in __init__ self.bus.write_word_data(self.address,0x01,self.resolution | 0x1) IOError: [Errno 5] Input/output error
Altre info sui sensori i2c nella pagina Collegare dispositivi I2C
il primo è quello collegato ad arduino il secondo è quello collegato a raspberry
eseguire il programma:
python station.py
si puo' interrompere con ctrl-c
troverete i file logrpc.txt logmqtt.txt che riportano il trace delle relative comunicazioni.
Questo un esempio di logmqtt.txt
log: Sending PUBLISH (dFalse, q1, r0, m44, 'meteo/-/1137637,4449216/generic/254,0,0/103,3000,-,-/B12101', ... (42 bytes) log: Received PUBACK (Mid: 44) mid: 44 log: Sending PUBLISH (dFalse, q1, r0, m45, 'meteo/-/1137637,4449216/generic/254,0,0/103,3000,-,-/B12101', ... (42 bytes) log: Received PUBACK (Mid: 45) mid: 45 log: Sending PUBLISH (dFalse, q1, r0, m46, 'meteo/-/1137637,4449216/generic/254,0,0/103,3000,-,-/B12101', ... (42 bytes) log: Received PUBACK (Mid: 46) mid: 46 log: Sending PUBLISH (dFalse, q1, r0, m47, 'meteo/-/1137637,4449216/generic/254,0,0/103,3000,-,-/B12101', ... (42 bytes) log: Received PUBACK (Mid: 47) mid: 47
Il broker mqtt e il data base con web service a applicazione javascript
Il tutto è implementato su raspberry con pidora 20.
Il software in fase di sviluppo è disponibile qui: http://sourceforge.net/projects/r-map/trunk/python
Ci sono una serie di dipendenze tra cui il software arduino e una serie di moduli python tra cui pyserial ... Bisogna anche installare Mosquitto tramite pacchetto e ancor meglio aggiungendo un repository facendo riferimento alla pagina: http://mosquitto.org/download/
In alternativa si può usare:
sudo apt-get install python-pip sudo pip install mosquitto
Master board
todo list relativa al firmware r-map:
- sensore di pressione uno di umidità
- umidità e luminosità
Si potrebbero inserire nella lib SensorDriver
cosa bisogna collegare:
- arduino mega2560
- nRF24L01P http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P (con un condensatore sull'alimentazione)
- ENC28J60 Ethernet LAN / Network Module http://hobbycomponents.com/index.php/enc28j60-ethernet-lan-network-module-for-arduino.html?SID=4553643ad13151d3fce1062a1f877f32
- Tiny RTC I2C AT24C32 DS1307 Real Time Clock Module with EEPROM ARM PIC
http://hobbycomponents.com/index.php/tiny-rtc-i2c-at24c32-ds1307-real-time-clock-module-with-eeprom-arm-pic.html http://www.hobbyist.co.nz/sites/default/files/docs/RTC/Tiny_RTC_schematic.pdf
- connettore I2C (4 fili)
- connettore Jtag http://www.raspibo.org/wiki/index.php/Gruppo_Meteo/HowTo/DebugAVR#Collegamenti
Connessioni
pin nrf24 | pin arduino mega |
1 | gnd |
2 | 3.3 |
3 | dio9 |
4 | dio10 |
5 | dio52 |
6 | dio51 |
7 | dio50 |
8 | dio18 |
Enc28j60 | Arduino Mega 2560 |
GND | GND |
3.3 | 3.3/5V |
SO | Pin50 |
SI | Pin51 |
SCK | Pin52 |
CS | Pin53 |
rtc connettore P2 | arduino mega |
gnd | gnd |
vcc | vcc 5V (5v non 3.3) |
sda | sda |
scl | scl |
ds | scollegato |
Software
Aprire l'ambiente di sviluppo arduino
* modificare la posizione della cartella degli sketch da File-> preferenze e impostarlo a {tua home dir}/svn/r-map-code/trunk/sketchbook
oppure copiare le cartelle sketchbook e libraries sotto {tua home dir}/sketchbook
compilare e caricare su arduino
Dai avanti ... fatevi sotto!