Differenze tra le versioni di "Gruppo Meteo/HowToOld"

Da raspibo.
Jump to navigation Jump to search
Riga 1: Riga 1:
= Obsoleta ! da aggiornare ! =
+
= da completare ! =
  
''' Analisi per l'implementazione: '''
+
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
  
Proveremo a misurare la temperatura.
+
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
  
Per questo esempio utilizzeremo un raspberry e un arduino Uno
+
Funzionamento generale:
La sensoristica prevede sue sensori di temperatura i2c della serie tmp della TEXAS INSTRUMENTS nello specifico  tmp102 o tmp275.
+
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
  
''' Sensoristica '''
+
 
Utilizzeremo sensori I2C.
+
== 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.
 
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.
  
* Dato che il sensore tmp102 e' di tipo smd si puo' acqusitare anche gia' saldato su basetta lo vende ad esempio [https://www.sparkfun.com/products/9418 sparkfun]
+
Iniziamo misurando la temperatura.
 
 
* questi i dati del tmp27 http://www.ti.com/lit/ds/symlink/tmp275.pdf
 
  
Procederemo a sperimentare anche:
+
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 [https://www.sparkfun.com/products/9418 sparkfun]; questi i dati del tmp27 http://www.ti.com/lit/ds/symlink/tmp275.pdf
 
* [http://www.analog.com/static/imported-files/data_sheets/ADT7420.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
 
* [http://www.analog.com/static/imported-files/data_sheets/ADT7420.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
  
  
Esistono anche:
+
se avete la  breakout board per tmp102 seguite le conessioni mostrate in:
* [http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf MCP9808] prodotto da Microchip (l'accuratezza di questo sensore è al limite della accettabilità)
+
http://bildr.org/2011/01/tmp102-arduino/
* [http://www.nxp.com/documents/data_sheet/LM75A.pdf LM75A] by NXP (questo sensore è inaccurato e dovrebbe essere evitato in condizioni operative)
+
(l'esempio software è pero' un po' approssimativo)
 +
c'è anche questo https://github.com/tz1/sparkfun/blob/master/i2cperiph/tmp102.c
  
''' il broker mqtt e il data base con web service a applicazione javascript '''
 
  
Il tutto è implementato su raspberry con pidora 18.
+
== Base board ==
Per il momento basta sapere che è disponibile su http:pat1.bisognodipace.org
 
  
''' Predisposizione software '''
+
=== Hardware ===
  
Il software in fase di sviluppo è disponibile qui:
+
* Un esempio di misura della temperatura con sensore TMP102 sul sito [http://www.element14.com/community/groups/raspberry-pi/blog/2012/07/26/is-it-done-yet-temperature-sensing-with-the-raspberry-pi 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.
http://sourceforge.net/projects/r-map/
+
* 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
Su Raspberry Pi:
 
 
 
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
 
  
 +
=== Software ===
 
per scaricare il software r.map:
 
per scaricare il software r.map:
  
Riga 53: Riga 74:
 
  svn checkout svn://svn.code.sf.net/p/r-map/code/ r-map-code
 
  svn checkout svn://svn.code.sf.net/p/r-map/code/ r-map-code
  
''' Installare su arduino '''
 
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
 
 
''' installazione hardware '''
 
 
''' installazione su raspberry '''
 
* Un esempio di misura della temperatura con sensore TMP102 sul sito [http://www.element14.com/community/groups/raspberry-pi/blog/2012/07/26/is-it-done-yet-temperature-sensing-with-the-raspberry-pi 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
 
 
''' installazione su arduino '''
 
 
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
 
 
Al termite collegate raspberry a arduino tramite il cavo USB
 
 
''' semplice esempio di software di campionamento '''
 
  
 
su raspberry:
 
su raspberry:
Riga 102: Riga 98:
 
troverete i file logrpc.txt logmqtt.txt che riportano il trace delle relative comunicazioni.
 
troverete i file logrpc.txt logmqtt.txt che riportano il trace delle relative comunicazioni.
  
I risultati, sempre che il serverino sia acceso, http://pat1.bisognodipace.org:8000/
+
==== 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/
  
''' news '''
+
In alternativa si può usare:
Direi che il firmware r-map per arduino si stia avvicinando alla
 
versione 1.0.
 
  
Abbiamo testato il firmaware su arduino mega2560 e abbiamo goduto dell'ampia
+
sudo apt-get install python-pip
disponibilità di memoria. Stiamo riportando bug e facendo test con gli
+
sudo pip install mosquitto
sviluppatori di arduino_uip e siamo riusciti ad avere i primi instabili
+
 
funzionamenti con enc28j60
+
== Master board ==
https://github.com/ntruchsess/arduino_uip/issues/47
 
; superati i problemi relativi al buffer sulla seriale e la gestione
 
dell'rtc.
 
  
Quindi cosa funziona ora:
+
todo list relativa al firmware r-map:
due firmware per arduino uno:
+
* sensoristica: per ora abbiamo solo la gestione di sue sesori di
  a) configurazione e dati con jsonrpc su seriale
+
        temperatura; Paol ha un sensore di pressione uno di umidità, Mario quelli di
   b) mqtt su ethernet
+
        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
  
un unico firmaware per arduino mega2560
+
'''Connessioni'''
  
Sensoristica:
+
{|
* per ora sono funzionanti i driver per due sensori di temperatura i2c
+
| pin nrf24 || pin arduino mega
* sono gestibili sensori con misurazioni di più parametri
+
|-
 +
| 1 || gnd
 +
|-
 +
| 2 || 3.3
 +
|-
 +
| 3 || dio9
 +
|-
 +
| 4 || dio10
 +
|-
 +
| 5 || dio52
 +
|-
 +
| 6 || dio51
 +
|-
 +
| 7 || dio50
 +
|-
 +
| 8 || dio18
 +
|}
  
protocollo invio dati:
+
{|
* interrogazione dei sensori su seriale con jsonrpc
+
| Enc28j60 || Arduino Mega 2560
* comandi modalità attuatore su seriale con jsonrpc
+
|-
* mqtt su ethernet con ethernet shield e alpha version su enc28j60
+
| GND || GND
 +
|-
 +
| 3.3 || 3.3/5V
 +
|-
 +
| SO || Pin50
 +
|-
 +
| SI || Pin51
 +
|-
 +
| SCK || Pin52
 +
|-
 +
| CS || Pin53
 +
|}
  
gestione time:
+
{|
* gestione time con rtc su i2c
+
| rtc connettore P2 || aruino mega
* ntp su ethernet
+
|_
 +
| gnd || gnd
 +
|-
 +
| vcc || vcc 5V (5v non 3.3)
 +
|-
 +
| sda || sda
 +
|-
 +
| scl || scl
 +
|-
 +
| ds || scollegato
 +
|}
  
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:
+
==== Software ====
all'accesione  viene verificata la presenza di una configurazione di
+
Aprire l'ambiente di sviluppo arduino
versione corrispondente al firmware, si configura la rete con dhcp, si
+
* modificare la posizione della cartella degli sketch da File-> preferenze e impostarlo a {tua home dir}/svn/r-map-code/trunk/sketchbook
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
 
  
todo list relativa al firmware r-map
+
oppure copiare le cartelle sketchbook e libraries sotto {tua home dir}/sketchbook
  
      * verifica mqtt con arduino_uip per enc28j60; i problemi paiono
+
compilare e caricare su arduino
        dovuti a incompatibilità con versioni più nuove di gcc;
 
        utilizziamo gcc 4.8 mentre gli sviluppatori il 4.3; qualcuno
 
        potrebbe prendere il semplice esempio mqtt e testarlo con
 
        aurduino_uip utilizzando gcc 4.3 (credo sia la versione su
 
        windows o su mac)
 
      * sensoristica: per ora abbiamo solo la gestione di sue sesori di
 
        temperatura; Paol ha un sensore di pressione uno di umidità, Mario quelli di
 
        umidità e luminosità. Si potrebbero inserire nella lib
 
        SensorDriver
 
      * comucazione radio: abbiamo selezionato 3 chip rx/tx; 2 li
 
        abbiamo disponibili, il terzo è da procurare. Bisognerebbe
 
        iniziare a fare dei test di trasmissio/ricezionecon le relative
 
        librerie.
 
      * protocollo mqtt-sn; questo è il protocollo mqtt per trasmissione
 
        radio; ci sono già alcune lib da cui partire:
 
        https://bitbucket.org/MerseyViking/mqtt-sn-arduino
 
        https://github.com/TomoakiYAMAGUCHI ; un forum di
 
        riferimento:https://groups.google.com/forum/#!forum/mqtt
 
      * gestione batterie e eventuale pannellino solare per la versione
 
        via radio; firmware a bassissimo consumo con l'utilizzo delle
 
        apposite librerie
 
      * prototipizzazione: si potrebbe provare ad utilizzare questa
 
        board:https://www.sparkfun.com/products/10743 scatole e
 
        scatoline stampate 3D ?
 
  
abbiamo poi da integrare il nostro arduino col resto del sistema; con
 
Giacomo dobbiamo terminare l'interfacciamento con emon-cms; dovremmo
 
anche avere a disposizione tra poco un server dove installare tutti gli
 
specifici software che avevamo già parzialmente testato e per quanto
 
riguarda raspberry in questi giorni sta per essere rilasciata pidora
 
2014 (fedora 20).
 
  
 
Dai avanti ... fatevi sotto!
 
Dai avanti ... fatevi sotto!

Versione delle 16:49, 13 giu 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.


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

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.

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:

  • sensoristica: per ora abbiamo solo la gestione di sue sesori di
       temperatura; Paol ha un sensore di pressione uno di umidità, Mario quelli di
       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 3.3/5V
SO Pin50
SI Pin51
SCK Pin52
CS Pin53
rtc connettore P2 aruino 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!