Gruppo Meteo/HowToOld

Da raspibo.
Jump to navigation Jump to search

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.


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

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:

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

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 5V (funziona anche a 3.3, ma assorbe troppo)
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!