Differenze tra le versioni di "Gruppo Meteo/HowToOld"

Da raspibo.
Jump to navigation Jump to search
m (PaoloPatruno ha spostato la pagina Gruppo Meteo/HowTo a Gruppo Meteo/HowToOld: creazione nuovo howto)
 
(97 versioni intermedie di 5 utenti non mostrate)
Riga 1: Riga 1:
= Obsoleta ! da aggiornare ! =
 
  
''' Analisi per l'implementazione: '''
+
= HowTo =
  
 +
Di seguito tutti i passaggi (o quasi) per rendere funzionante un sistema rmap che comprenda uno modulo base, un modulo master ed un modulo satellite.
  
  
 +
== Sensori ==
  
Proveremo a misurare la temperatura.
+
Utilizzeremo per cominciare sensori I2C.
 +
Oltre alla versatitilità e ampia diffusione di questo bus, su Raspberry e microcontroller AVR la gestione di i2c e' fatta a livello hardware e non comporta carichi rilevanti per la cpu.
  
Per questo esempio utilizzeremo un raspberry e un arduino Uno
+
=== Iniziamo misurando la temperatura ===
La sensoristica prevede sue sensori di temperatura i2c della serie tmp della TEXAS INSTRUMENTS nello specifico  tmp102 o tmp275.
 
  
''' Sensoristica '''
+
La sensoristica prevede sue sensori di temperatura i2c della serie tmp della TEXAS INSTRUMENTS nello specifico  tmp102 o tmp275 e uno Analog Device.
Utilizzeremo sensori I2C.
+
* 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 tmp275 http://www.ti.com/lit/ds/symlink/tmp275.pdf
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.
+
* [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
 +
 
 +
=== Pressione ===
 +
 
 +
Per ora è gestito un solo tipo si sensore di pressione:
 +
 
 +
* Bosch's BMP085 is a rock-solid barometric pressure sensor (DISCONTINUED replaced with the BMP180 which is a drop-in replacement) diffusamente disponibile premontato su un modulo
 +
 
 +
=== Umidità ===
 +
 
 +
Per ora  il sensore di umidità gestito dalle librerie è il seguente:
 +
 
 +
* Honeywell HumidIcon Digital Humidity/Temperature Sensors HIH6100 Series±4.0 %RH Accuracy Available with hydrophobic filter and
 +
condensation-resistance, allowing for use in many condensing environments, or without hydrophobic filter, non-condensing
 +
http://sensing.honeywell.com/honeywell-sensing-humidicon-hih6100-series-product-sheet-009059-6-en.pdf
 +
 
 +
== Modulo base ==
 +
 
 +
=== Hardware ===
 +
 
 +
{|width="100%"
 +
|- valign="top"
 +
|
 +
* raspberry B
 +
* sdcard
 +
* alimentatore
 +
* connettore gpio
 +
* breadboard
 +
* sensori
 +
* hub usb alimentato
 +
* chiavetta wifi
 +
* hard disk usb (opzionale, ma consigliato), con una partizione etx4 ed etichetta "rmap"
 +
* RTC (opzionale ma consigliato)
 +
|[[File:Rmap_base_01.jpg|300px|thumb|Modulo base]]
 +
|}
  
* 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]
+
=== Creazione della SD ===
 +
Attualmente è possibile scaricare una immagine già pronta di scheda SD nel sito [http://rmap.cc/download/ download].
 +
Scaricate l'ultima immagine disponibile etichettata AAAAMMGG-production.img
  
* questi i dati del tmp27 http://www.ti.com/lit/ds/symlink/tmp275.pdf
+
Una volta scaricata decomprimete l'immagine:
 +
bunzip2 AAAAMMGG-production.img.bz2
  
Procederemo a sperimentare anche:
+
Ora vi serve una scheda SD preferibilmente di classe 10: la dimensione minima richiesta è di 8 giga.
* [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
+
 
 +
Inserite la vostra Card nel lettore del vostro PC, se avete dubbi sul nome di periferica che il sistema ha assegnato, un comando
 +
<pre style="color:blue">
 +
dmesg
 +
</pre>
 +
dovrebbe fugarli (guardate nelle ultime righe se l'avete appena inserita), ad esempio:
 +
<pre style="color:green">
 +
[1680280.085043] usb 5-1: new full speed USB device using uhci_hcd and address 61
 +
[1680280.343101] usb 5-1: New USB device found, idVendor=2341, idProduct=0043
 +
[1680280.343109] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
 +
[1680280.343115] usb 5-1: Manufacturer: Arduino (www.arduino.cc)
 +
[1680280.343119] usb 5-1: SerialNumber: 74132343430351715131
 +
[1680280.343305] usb 5-1: configuration #1 chosen from 1 choice
 +
[1680280.346250] cdc_acm 5-1:1.0: ttyACM0: USB ACM device
 +
[1680317.456102] usb 5-1: USB disconnect, address 61
 +
[1680328.069023] mmc0: new SD card at address e7c6
 +
[1680328.069220] mmcblk0: mmc0:e7c6 SD256 246 MiB
 +
[1680328.069311]  mmcblk0: p1
 +
[1680328.326222] FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
 +
</pre>
 +
 
 +
il sistema probabilmente 'montera`' la periferica, smontatela (comando "mount" senza parametri per verificare se e` montata ed il percorso, per smontare: "umount <percorso di mount>"), questo perche` dobbiamo 'copiare' l'immagine, ma '''ATTENZIONE, Il comando seguente eliminera` tutti i dati della SD Card''', inoltre '''rileggete due volte (anche tre) il comando prima di dare il return. Se mettete per errore il device del vostro disco rigido il comando cancellera' tutti i vostri dati''':
 +
<pre style="color:red">
 +
# ATTENZIONE QUESTO COMANDO ELIMINA IN MODO PERMANENTE IL CONTENUTO DI DEVICEtrovato
 +
dd if=aaaammgg-production.img of=/dev/DEVICEtrovato
 +
</pre>
 +
 
 +
=== Connessioni hardware ===
 +
 
 +
* modulo RTC
 +
{|
 +
| rtc connettore P2 || arduino mega
 +
|-
 +
| gnd || gnd
 +
|-
 +
| vcc || vcc 5V (5v non 3.3)
 +
|-
 +
| sda || sda
 +
|-
 +
| scl || scl
 +
|-
 +
| ds || scollegato
 +
|}
 +
 
 +
* switch di power off normalmente aperto
 +
 
 +
{|
 +
| switch || arduino mega
 +
|-
 +
| pin 1 || gnd
 +
|-
 +
| pin2 || pin 18
 +
|}
 +
 
 +
* Sensori I2c
 +
{|
 +
| sensore || arduino mega
 +
|-
 +
| gnd || gnd
 +
|-
 +
| vcc || vcc 3.3V (dipende dal sensore)
 +
|-
 +
| sda || sda
 +
|-
 +
| scl || scl
 +
|}
 +
 
 +
 
 +
=== Configurazione ===
 +
 
 +
Con un browser puntare all'indirizzo:
 +
 
 +
http://rmap.cc/registrazione/register/
 +
 
 +
e registrarsi come nuovo utente; poi con il proprio bowser:
  
 +
http://base/wizard/
  
Esistono anche:
+
autenticarsi con
* [http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf MCP9808] prodotto da Microchip (l'accuratezza di questo sensore è al limite della accettabilità)
+
user: rmap
* [http://www.nxp.com/documents/data_sheet/LM75A.pdf LM75A] by NXP (questo sensore è inaccurato e dovrebbe essere evitato in condizioni operative)
+
password: rmap
 +
e nel wizard di configurazione immettere i propri dati: utente e password con cui ci si è registrati sul server e le coordinate accurate della stazione; nella scermata successiva inserire i dati per l'eventuale accesso alla rete wifi
  
''' il broker mqtt e il data base con web service a applicazione javascript '''
+
=== Gestione avanzata ===
 +
==== Connessione in rete ====
 +
Per il collegamento in rete è consigliabile utilizzare uno switch a cui collegare sia il modulo base, che il modulo master, che eventualmente un portatile per connettersi a Raspberry.
  
Il tutto è implementato su raspberry con pidora 18.
+
Il modulo base si collega ad internet con una chiavetta wifi o GSM/GPRS o ethernet. Per ognuna di queste è necessario effettuare apposite configurazioni per impostare la rete.
Per il momento basta sapere che è disponibile su http:pat1.bisognodipace.org
 
  
''' Predisposizione software '''
+
Il raspberry ha attivo anche un dhcp e fa anche da dns.
  
Il software in fase di sviluppo è disponibile qui:  
+
Al rspberry risponde al nome "base" mentre le board master ai nomi:
http://sourceforge.net/projects/r-map/
+
* master
 +
* master2
 +
* master3
 +
* master4
  
Su Raspberry Pi:
+
===== Prima connessione =====
  
Ci sono una serie di dipendenze tra cui il software arduino e una serie di moduli python tra cui pyserial ...
+
Info utili per l'accesso a Raspberry:
Bisogna anche installare Mosquitto tramite pacchetto e ancor meglio aggiungendo un repository facendo riferimento alla pagina: http://mosquitto.org/download/
+
 
 +
* hostname: base
 +
* user: rmap - password: rmap
 +
* user: root - password: cambiami
  
In alternativa si può usare:
+
ssh root@base
  
sudo apt-get install python-pip
+
===== Configurazione scheda di rete wireless =====
sudo pip install mosquitto
 
  
per scaricare il software r.map:
+
La chiavetta permette la sincronizzazione ntp da internet e l'upload dei dati su internet inoltre il raspberry è gia configurato come gateway e permette il collegamento ad internet anche degli altri dispositivi collegati allo switch perciò il primo passo da effettuare è la configurazione della rete.
  
mkdir ~/svn
+
Da riga di comando:
cd ~/svn
 
svn checkout svn://svn.code.sf.net/p/r-map/code/ r-map-code
 
  
''' Installare su arduino '''
+
nmcli device wifi list
Aprire l'ambiente di sviluppo arduino
+
  nmcli device wifi connect <SSID> password <password>
  * 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
+
Per configurare altre interfacce di rete consultare la documentazione di nmcli
  
compilare e caricare su arduino
+
Consultare [[Gruppo_Meteo/Troubleshooting#Configurazione_ip_statico_su_interfaccia_wifi]] per un appunto sulla configurazione di IP statico di wlan0
  
''' installazione hardware '''
+
==== Aggiornamento del software ====
  
''' installazione su raspberry '''
+
Da utente root
* 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 '''
+
yum upgrade --skip-broken -y
  
se avete la  breakout board per tmp102 seguite le conessioni mostrate in:
+
Verificare se vanno applicate patch all'immagine [http://www.raspibo.org/wiki/index.php/Gruppo_Meteo/ToDo qui.]
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
+
fare reboot del raspberry:
 +
reboot
  
''' semplice esempio di software di campionamento '''
+
==== Connessione al modulo base via web ====
  
su raspberry:
+
Con un browser puntare all'indirizzo:  
cd ~/svn/r-map-code/trunk/python
 
  
Modificare latitudine e longitude nello script station.py inserendo quelle della propria stazione :
+
http://base/
  
lon=11.86992
 
lat=44.98906
 
  
Modificare anche gli indirizzi i2c dei vostri sensori
+
{|
rpcaddress=0x4f
+
|[[File:Base Home.png|400px|thumb|right|Monitoraggio processi]]
i2caddress=0x4c
+
|}
  
il primo è quello collegato ad arduino
+
Verificare che tutti i processi salvo stationd siano attivi cliccando "verifica processi".
il secondo è quello collegato a raspberry
 
  
eseguire il programma:
+
A questo punto si passa alla fase di configurazione: cliccare "Configurazione". (Per l'accesso: rmap/rmap)
  
python station.py
+
{|
 +
|[[File:Base Monit.png|400px|thumb|right|Monitoraggio processi]]
 +
|}
  
si puo' interrompere con ctrl-c
+
==== Configurazione avanzata ====
  
troverete i file logrpc.txt logmqtt.txt che riportano il trace delle relative comunicazioni.
+
Sono presenti alcune pagine per la configurazione dei dati sia dei sensori che dei dati della stazione vera e propria.
  
I risultati, sempre che il serverino sia acceso, http://pat1.bisognodipace.org:8000/
+
Cliccare :
 +
'''configurazione'''
  
 +
Immettere le credenziali (di default: rmap/rmap).
  
 +
Cliccare:
  
 +
'''Stations'''
  
''' news '''
+
* Aggiornare i dati di posizione di home (latitudine, longitudine) (Mantenere slug "home") e il proprio identificativo di stazione (ident) al massimo di 9 caratteri concordato con lo staff di RMAP.  
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
+
Salvare, ed eventualmente procedere con le altre personalizzazioni tramite l'interfaccia web.
disponibilità di memoria. Stiamo riportando bug e facendo test con gli
+
Questa operaione è opzionale:
sviluppatori di arduino_uip e siamo riusciti ad avere i primi instabili
 
funzionamenti con enc28j60
 
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:
+
* Hardware boards
due firmware per arduino uno:
+
* attivare/disattivare/modificare la configurazione in base alle board che si vorranno collegare
  a) configurazione e dati con jsonrpc su seriale
 
  b) mqtt su ethernet
 
  
un unico firmaware per arduino mega2560
+
* sensor
 +
* attivare/disattivare/modificare la configurazione in base ai sensori che si vorranno collegare
  
Sensoristica:
+
Come ultima operaione attivare la station '''home''' sempre dal menu '''Station'''
* per ora sono funzionanti i driver per due sensori di temperatura i2c
 
* sono gestibili sensori con misurazioni di più parametri
 
  
protocollo invio dati:
+
Stationd dovrebbe ora partire iniziando ad rilevare i dati del modulo base.
* interrogazione dei sensori su seriale con jsonrpc
+
Verificare quindi che tutti i processi siano attivi cliccando "verifica processi".
* comandi modalità attuatore su seriale con jsonrpc
 
* mqtt su ethernet con ethernet shield e alpha version su enc28j60
 
  
gestione time:
+
{|
* gestione time con rtc su i2c
+
|[[File:Base config 01.png|300px|thumb|right|Configurazione]]
* ntp su ethernet
+
|[[File:Base config 02.png|300px|thumb|right|Configurazione]]
 +
|[[File:Base config 03.png|300px|thumb|right|Configurazione]]
 +
|[[File:Base config 04.png|300px|thumb|right|Configurazione]]
 +
|[[File:Base config 05.png|300px|thumb|right|Configurazione]]
 +
|-
 +
|[[File:Base config 06.png|300px|thumb|right|Configurazione]]
 +
|[[File:Base config 07.png|300px|thumb|right|Configurazione]]
 +
|[[File:Base config 08.png|300px|thumb|right|Configurazione]]
 +
|[[File:Base config 09.png|300px|thumb|right|Configurazione]]
 +
|[[File:Base config 10.png|300px|thumb|right|Configurazione]]
 +
|}
  
configurazione:
+
== Modulo master ==
sono configurabili runtime:
+
Il modulo B richiede cavo ethernet con power over ethernet.
* 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:
 
Funzionamento generale:
Riga 163: Riga 268:
 
rinnovo periodico dei dati del dhcp
 
rinnovo periodico dei dati del dhcp
  
todo list relativa al firmware r-map
+
=== Hardware ===
 +
 
 +
{|width="100%"
 +
|- valign="top"
 +
|
 +
* arduino mega 2560
 +
* cavo USB tipo B
 +
* breadborad
 +
* modulo RTC
 +
* modulo mini ethernet ENC60
 +
* modulo radio RF24
 +
* cavo power over ethernet
 +
* stabilizzatore dcdc switched
 +
* sensori
 +
* eventualmente relays attuatori
 +
 
 +
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
 +
 
 +
 
 +
|[[File:Rmap_master_01.jpg|400px|thumb|Modulo master]]
 +
|[[File:R-map schema.png|400px|thumb|Modulo master, schema]]
 +
|}
 +
 
 +
==== Breadboard ====
 +
 
 +
'''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
 +
|}
 +
 
 +
* Sensori I2c
 +
{|
 +
| sensore || arduino mega
 +
|-
 +
| gnd || gnd
 +
|-
 +
| vcc || vcc 3.3V (dipende dal sensore)
 +
|-
 +
| sda || sda
 +
|-
 +
| scl || scl
 +
|}
 +
 
 +
==== Cicuito stampato ====
 +
 
 +
* [https://sourceforge.net/p/r-map/code/HEAD/tree/trunk/kicad/ Qui] si trova il progetto del circuito stampato con Kicad.
 +
 
 +
* Su [https://oshpark.com/shared_projects/IVVkMYHf OSH Park shared project] invece puoi trovare i gerber e tutto quanto pronto per la stampa del pcb oppure ordinarli direttamente a OSH Park
 +
 
 +
=== Aggiornamento bootloader ===
 +
E' necessario aggiornare il bootloader di arduino mega in quanto alcuni vecchi bootloader non sono in grado di gestire il riavvio dopo l'intervento del watchdog richiedendo un distacco dell'alimentazione forzato.
 +
 
 +
In questo esempio abbiamo utilizzato una board '''dragon''' dell'AVR ma è possibile utilizzare altri metodi: [http://arduino.cc/en/Tutorial/ArduinoISP]
 +
 
 +
avrdude -c dragon_isp -P usb -p atmega2560 -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U efuse:w:0xFF:m
 +
avrdude -c dragon_isp -P usb -p atmega2560  -V -U flash:w:/usr/share/arduino/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex
 +
avrdude -c dragon_isp -P usb -p atmega2560 -U lock:w:0x0F:m
 +
 
 +
The first command unlocks the bootloader section and sets the fuses.
 +
The second writes the bootloader to the flash memory.
 +
And the third locks the bootloader section again.
 +
 
 +
=== Programmazione ===
 +
 
 +
Utilizzare il modulo A, accedere con l'utente rmap (pass rmap).
 +
ssh rmap@base
 +
 
 +
E' presente sulla home una dir svn che contiene tutto il software:
 +
 
 +
cd /home/rmap/svn/r-map-code/trunk
 +
svn up
 +
cd  arduino/ino/rmap
 +
ino clean
 +
cd src
 +
ln -sf rmap_master.h rmap_config.h
 +
cd ..
 +
ino build -m mega2560
 +
ino upload -m mega2560
 +
ino serial
 +
 
 +
un pò di spiegazione: nella home dell'utente rmap è presente tutto l'archivio software
 +
 
 +
con il comando svn up si aggiorna l'archivio scaricando l'utima versione dal repository
 +
 
 +
ino clean pulisce l'ambiente per la compilazione
 +
 
 +
linkiamo nello skecth la configurazione per il modulo master dato, l'unica cosa che cambia tra lo sketch del modulo master e quella del modulo satellite è questa e viene gestita cambiando il puntamento al file di configurazione
 +
 
 +
ino build compila il software per la piattaforma mega 2560
 +
 
 +
ino upload carica lo sketch su arduino
 +
 
 +
ino serial attiva il monitor seriale
 +
 
 +
=== Configurazione ===
 +
aggiornare le info sul file usando l'interfaccia web
 +
 
 +
http://base
 +
 
 +
Se non è la prima volta che si configura la board per forzare il caricamento della configurazione avviare arduino con il pin 8 collegato a massa
 +
 
 +
rmap-configure --help
 +
 
 +
solitamente il comando da utilizzare è:
 +
rmap-configure --board master
 +
 
 +
== Modulo satellite ==
 +
Il modulo C richiede batterie con stabilizzatore (e pannellino solare con regolatore di corrente)
 +
 
 +
[http://tmrh20.github.io/RF24Network/Tuning.html Performance and Data Loss: Tuning the Network]
 +
 
 +
=== Hardware ===
 +
 
 +
{|width="100%"
 +
|- valign="top"
 +
|
 +
* moulo microduino core+ (ATmega644p@5V 16MHz)
 +
* modulo microduino RF24 con antenna
 +
* modulo microduino seriale USB FT232R
 +
* cavo micro USB
 +
* sensori
 +
|[[File:Rmap_satellite_01.jpg|300px|thumb|Modulo satellite]]
 +
|}
 +
 
 +
=== Programmazione ===
 +
 
 +
E' simile a quella del modulo master si cambia solo il link al file di configurazione con un link simbolico ed il modello della scheda per compilazione ed upload
 +
 
 +
cd /home/rmap/svn/r-map-code/trunk
 +
svn up
 +
cd  arduino/ino/rmap
 +
ino clean
 +
cd src
 +
ln -sf rmap_satellite.h rmap_config.h
 +
cd ..
 +
ino build -m 644pa16m
 +
ino upload -m 644pa16m
 +
ino serial
 +
 
 +
=== Configurazione ===
 +
 
 +
Per la configurazione si usa il comando rmap-configure.
 +
 
 +
rmap-configure --help
 +
 
 +
Solitamnete si puo' utilizzare questo comando:
 +
 
 +
rmap-configure --board satellite
 +
 
 +
E' possibile collegare tutte le board contemporaneamente e dare un unico comando per configurarle tutte:
 +
 
 +
[rmap@pidora ~]$ rmap-configure
 +
django_extensions is not installed; I do not use it
 +
STATION:
 +
home
 +
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board:  my master
 +
start configuration
 +
Serial Transport /dev/ttyACM0
 +
>>>>>>> reset config
 +
save {'reset': True}
 +
TCP/IP Transport master
 +
mqttserver: {'mqttsampletime': 5, 'mqttserver': 'mqttserver'}
 +
mqtt user and password: {'mqttpassword': u'', 'mqttuser': u''}
 +
ntpserver: {'ntpserver': 'ntpserver', 'mac': 'OK'}
 +
RF24Network Transport 0
 +
thisnode: {'thisnode': 0, 'channel': 93}
 +
key: {'key': 'OK'}
 +
iv: {'iv': 'OK'}
 +
>>>> sensors:
 +
remote sensor tmp-True-RF24-TMP-72-254,0,0-105,2000,-,--my-master
 +
add driver: {'id': 0}
 +
my sensor-True-TMP-TMP-72-254,0,0-105,4000,-,--my-master
 +
add driver: {'id': 1}
 +
mqttrootpath: {'mqttrootpath': 'rmap/-/1137617,4449221/rmap/'}
 +
>>>>>>> save config
 +
save {'save': True}
 +
----------------------------- board configured ---------------------------------------
 +
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board:  my microduino
 +
start configuration
 +
Serial Transport /dev/ttyUSB0
 +
>>>>>>> reset config
 +
save {'reset': True}
 +
transport tcpip not present
 +
RF24Network Transport 1
 +
thisnode: {'thisnode': 1, 'channel': 93}
 +
key: {'key': 'OK'}
 +
iv: {'iv': 'OK'}
 +
>>>> sensors:
 +
my sensor-True-TMP-TMP-72-254,0,0-105,10000,-,--my-microduino
 +
add driver: {'id': 0}
 +
mqttrootpath: {'mqttrootpath': 'rmap/-/1137617,4449221/rmap/'}
 +
>>>>>>> save config
 +
save {'save': True}
 +
----------------------------- board configured ---------------------------------------
 +
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board:  my raspberry
 +
start configuration
 +
transport serial not present
  
      * verifica mqtt con arduino_uip per enc28j60; i problemi paiono
+
== Shutdown del modulo base ==
        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
+
Sul modulo base è presente il software [[http://raspdbusgpiopy.sourceforge.net/ raspdbusgpiopy]] sviluppato nei mesi precedenti che monitora lo stato del pin18 sul gpio.
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!
+
Quando il pin 18 viene collegato a massa, il software invia un segnale su dbus ed il sistema va in shutdown, questo risulta estremamente utile quando il modulo base e` installato ''headless'', cioè senza tastiera e video collegati.

Versione attuale delle 13:14, 20 nov 2015

HowTo

Di seguito tutti i passaggi (o quasi) per rendere funzionante un sistema rmap che comprenda uno modulo base, un modulo master ed un modulo satellite.


Sensori

Utilizzeremo per cominciare sensori I2C. Oltre alla versatitilità e ampia diffusione di questo bus, su Raspberry e microcontroller AVR 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.

Pressione

Per ora è gestito un solo tipo si sensore di pressione:

  • Bosch's BMP085 is a rock-solid barometric pressure sensor (DISCONTINUED replaced with the BMP180 which is a drop-in replacement) diffusamente disponibile premontato su un modulo

Umidità

Per ora il sensore di umidità gestito dalle librerie è il seguente:

  • Honeywell HumidIcon Digital Humidity/Temperature Sensors HIH6100 Series±4.0 %RH Accuracy Available with hydrophobic filter and

condensation-resistance, allowing for use in many condensing environments, or without hydrophobic filter, non-condensing http://sensing.honeywell.com/honeywell-sensing-humidicon-hih6100-series-product-sheet-009059-6-en.pdf

Modulo base

Hardware

  • raspberry B
  • sdcard
  • alimentatore
  • connettore gpio
  • breadboard
  • sensori
  • hub usb alimentato
  • chiavetta wifi
  • hard disk usb (opzionale, ma consigliato), con una partizione etx4 ed etichetta "rmap"
  • RTC (opzionale ma consigliato)
Modulo base

Creazione della SD

Attualmente è possibile scaricare una immagine già pronta di scheda SD nel sito download. Scaricate l'ultima immagine disponibile etichettata AAAAMMGG-production.img

Una volta scaricata decomprimete l'immagine:

bunzip2 AAAAMMGG-production.img.bz2

Ora vi serve una scheda SD preferibilmente di classe 10: la dimensione minima richiesta è di 8 giga.

Inserite la vostra Card nel lettore del vostro PC, se avete dubbi sul nome di periferica che il sistema ha assegnato, un comando

dmesg

dovrebbe fugarli (guardate nelle ultime righe se l'avete appena inserita), ad esempio:

[1680280.085043] usb 5-1: new full speed USB device using uhci_hcd and address 61
[1680280.343101] usb 5-1: New USB device found, idVendor=2341, idProduct=0043
[1680280.343109] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[1680280.343115] usb 5-1: Manufacturer: Arduino (www.arduino.cc)
[1680280.343119] usb 5-1: SerialNumber: 74132343430351715131
[1680280.343305] usb 5-1: configuration #1 chosen from 1 choice
[1680280.346250] cdc_acm 5-1:1.0: ttyACM0: USB ACM device
[1680317.456102] usb 5-1: USB disconnect, address 61
[1680328.069023] mmc0: new SD card at address e7c6
[1680328.069220] mmcblk0: mmc0:e7c6 SD256 246 MiB 
[1680328.069311]  mmcblk0: p1
[1680328.326222] FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!

il sistema probabilmente 'montera`' la periferica, smontatela (comando "mount" senza parametri per verificare se e` montata ed il percorso, per smontare: "umount <percorso di mount>"), questo perche` dobbiamo 'copiare' l'immagine, ma ATTENZIONE, Il comando seguente eliminera` tutti i dati della SD Card, inoltre rileggete due volte (anche tre) il comando prima di dare il return. Se mettete per errore il device del vostro disco rigido il comando cancellera' tutti i vostri dati:

# ATTENZIONE QUESTO COMANDO ELIMINA IN MODO PERMANENTE IL CONTENUTO DI DEVICEtrovato
dd if=aaaammgg-production.img of=/dev/DEVICEtrovato 

Connessioni hardware

  • modulo RTC
rtc connettore P2 arduino mega
gnd gnd
vcc vcc 5V (5v non 3.3)
sda sda
scl scl
ds scollegato
  • switch di power off normalmente aperto
switch arduino mega
pin 1 gnd
pin2 pin 18
  • Sensori I2c
sensore arduino mega
gnd gnd
vcc vcc 3.3V (dipende dal sensore)
sda sda
scl scl


Configurazione

Con un browser puntare all'indirizzo:

http://rmap.cc/registrazione/register/

e registrarsi come nuovo utente; poi con il proprio bowser:

http://base/wizard/

autenticarsi con

user: rmap
password: rmap

e nel wizard di configurazione immettere i propri dati: utente e password con cui ci si è registrati sul server e le coordinate accurate della stazione; nella scermata successiva inserire i dati per l'eventuale accesso alla rete wifi

Gestione avanzata

Connessione in rete

Per il collegamento in rete è consigliabile utilizzare uno switch a cui collegare sia il modulo base, che il modulo master, che eventualmente un portatile per connettersi a Raspberry.

Il modulo base si collega ad internet con una chiavetta wifi o GSM/GPRS o ethernet. Per ognuna di queste è necessario effettuare apposite configurazioni per impostare la rete.

Il raspberry ha attivo anche un dhcp e fa anche da dns.

Al rspberry risponde al nome "base" mentre le board master ai nomi:

  • master
  • master2
  • master3
  • master4
Prima connessione

Info utili per l'accesso a Raspberry:

  • hostname: base
  • user: rmap - password: rmap
  • user: root - password: cambiami
ssh root@base
Configurazione scheda di rete wireless

La chiavetta permette la sincronizzazione ntp da internet e l'upload dei dati su internet inoltre il raspberry è gia configurato come gateway e permette il collegamento ad internet anche degli altri dispositivi collegati allo switch perciò il primo passo da effettuare è la configurazione della rete.

Da riga di comando:

nmcli device wifi list
nmcli device wifi connect <SSID> password <password>

Per configurare altre interfacce di rete consultare la documentazione di nmcli

Consultare Gruppo_Meteo/Troubleshooting#Configurazione_ip_statico_su_interfaccia_wifi per un appunto sulla configurazione di IP statico di wlan0

Aggiornamento del software

Da utente root

yum upgrade --skip-broken -y

Verificare se vanno applicate patch all'immagine qui.

fare reboot del raspberry:

reboot

Connessione al modulo base via web

Con un browser puntare all'indirizzo:

http://base/


Monitoraggio processi

Verificare che tutti i processi salvo stationd siano attivi cliccando "verifica processi".

A questo punto si passa alla fase di configurazione: cliccare "Configurazione". (Per l'accesso: rmap/rmap)

Monitoraggio processi

Configurazione avanzata

Sono presenti alcune pagine per la configurazione dei dati sia dei sensori che dei dati della stazione vera e propria.

Cliccare : configurazione

Immettere le credenziali (di default: rmap/rmap).

Cliccare:

Stations

  • Aggiornare i dati di posizione di home (latitudine, longitudine) (Mantenere slug "home") e il proprio identificativo di stazione (ident) al massimo di 9 caratteri concordato con lo staff di RMAP.

Salvare, ed eventualmente procedere con le altre personalizzazioni tramite l'interfaccia web. Questa operaione è opzionale:

  • Hardware boards
  • attivare/disattivare/modificare la configurazione in base alle board che si vorranno collegare
  • sensor
  • attivare/disattivare/modificare la configurazione in base ai sensori che si vorranno collegare

Come ultima operaione attivare la station home sempre dal menu Station

Stationd dovrebbe ora partire iniziando ad rilevare i dati del modulo base. Verificare quindi che tutti i processi siano attivi cliccando "verifica processi".

Configurazione
Configurazione
Configurazione
Configurazione
Configurazione
Configurazione
Configurazione
Configurazione
Configurazione
Configurazione

Modulo master

Il modulo B richiede cavo ethernet con power over ethernet.

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

Hardware

  • arduino mega 2560
  • cavo USB tipo B
  • breadborad
  • modulo RTC
  • modulo mini ethernet ENC60
  • modulo radio RF24
  • cavo power over ethernet
  • stabilizzatore dcdc switched
  • sensori
  • eventualmente relays attuatori

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


Modulo master
Modulo master, schema

Breadboard

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
  • Sensori I2c
sensore arduino mega
gnd gnd
vcc vcc 3.3V (dipende dal sensore)
sda sda
scl scl

Cicuito stampato

  • Qui si trova il progetto del circuito stampato con Kicad.
  • Su OSH Park shared project invece puoi trovare i gerber e tutto quanto pronto per la stampa del pcb oppure ordinarli direttamente a OSH Park

Aggiornamento bootloader

E' necessario aggiornare il bootloader di arduino mega in quanto alcuni vecchi bootloader non sono in grado di gestire il riavvio dopo l'intervento del watchdog richiedendo un distacco dell'alimentazione forzato.

In questo esempio abbiamo utilizzato una board dragon dell'AVR ma è possibile utilizzare altri metodi: [1]

avrdude -c dragon_isp -P usb -p atmega2560 -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U efuse:w:0xFF:m
avrdude -c dragon_isp -P usb -p atmega2560  -V -U flash:w:/usr/share/arduino/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex
avrdude -c dragon_isp -P usb -p atmega2560 -U lock:w:0x0F:m

The first command unlocks the bootloader section and sets the fuses. The second writes the bootloader to the flash memory. And the third locks the bootloader section again.

Programmazione

Utilizzare il modulo A, accedere con l'utente rmap (pass rmap).

ssh rmap@base

E' presente sulla home una dir svn che contiene tutto il software:

cd /home/rmap/svn/r-map-code/trunk
svn up
cd  arduino/ino/rmap
ino clean
cd src 
ln -sf rmap_master.h rmap_config.h
cd ..
ino build -m mega2560
ino upload -m mega2560
ino serial

un pò di spiegazione: nella home dell'utente rmap è presente tutto l'archivio software

con il comando svn up si aggiorna l'archivio scaricando l'utima versione dal repository

ino clean pulisce l'ambiente per la compilazione

linkiamo nello skecth la configurazione per il modulo master dato, l'unica cosa che cambia tra lo sketch del modulo master e quella del modulo satellite è questa e viene gestita cambiando il puntamento al file di configurazione

ino build compila il software per la piattaforma mega 2560

ino upload carica lo sketch su arduino

ino serial attiva il monitor seriale

Configurazione

aggiornare le info sul file usando l'interfaccia web

http://base

Se non è la prima volta che si configura la board per forzare il caricamento della configurazione avviare arduino con il pin 8 collegato a massa

rmap-configure --help

solitamente il comando da utilizzare è:

rmap-configure --board master

Modulo satellite

Il modulo C richiede batterie con stabilizzatore (e pannellino solare con regolatore di corrente)

Performance and Data Loss: Tuning the Network

Hardware

  • moulo microduino core+ (ATmega644p@5V 16MHz)
  • modulo microduino RF24 con antenna
  • modulo microduino seriale USB FT232R
  • cavo micro USB
  • sensori
Modulo satellite

Programmazione

E' simile a quella del modulo master si cambia solo il link al file di configurazione con un link simbolico ed il modello della scheda per compilazione ed upload

cd /home/rmap/svn/r-map-code/trunk
svn up
cd  arduino/ino/rmap
ino clean
cd src
ln -sf rmap_satellite.h rmap_config.h
cd ..
ino build -m 644pa16m
ino upload -m 644pa16m
ino serial

Configurazione

Per la configurazione si usa il comando rmap-configure.

rmap-configure --help

Solitamnete si puo' utilizzare questo comando:

rmap-configure --board satellite

E' possibile collegare tutte le board contemporaneamente e dare un unico comando per configurarle tutte:

[rmap@pidora ~]$ rmap-configure 
django_extensions is not installed; I do not use it
STATION:
home
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board:  my master
start configuration
Serial Transport /dev/ttyACM0
>>>>>>> reset config
save {'reset': True}
TCP/IP Transport master
mqttserver: {'mqttsampletime': 5, 'mqttserver': 'mqttserver'}
mqtt user and password: {'mqttpassword': u, 'mqttuser': u}
ntpserver: {'ntpserver': 'ntpserver', 'mac': 'OK'}
RF24Network Transport 0
thisnode: {'thisnode': 0, 'channel': 93}
key: {'key': 'OK'}
iv: {'iv': 'OK'}
>>>> sensors:
remote sensor tmp-True-RF24-TMP-72-254,0,0-105,2000,-,--my-master
add driver: {'id': 0}
my sensor-True-TMP-TMP-72-254,0,0-105,4000,-,--my-master
add driver: {'id': 1}
mqttrootpath: {'mqttrootpath': 'rmap/-/1137617,4449221/rmap/'}
>>>>>>> save config
save {'save': True}
----------------------------- board configured ---------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board:  my microduino
start configuration
Serial Transport /dev/ttyUSB0
>>>>>>> reset config
save {'reset': True}
transport tcpip not present
RF24Network Transport 1
thisnode: {'thisnode': 1, 'channel': 93}
key: {'key': 'OK'}
iv: {'iv': 'OK'}
>>>> sensors:
my sensor-True-TMP-TMP-72-254,0,0-105,10000,-,--my-microduino
add driver: {'id': 0}
mqttrootpath: {'mqttrootpath': 'rmap/-/1137617,4449221/rmap/'}
>>>>>>> save config
save {'save': True}
----------------------------- board configured ---------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board:  my raspberry
start configuration
transport serial not present

Shutdown del modulo base

Sul modulo base è presente il software [raspdbusgpiopy] sviluppato nei mesi precedenti che monitora lo stato del pin18 sul gpio.

Quando il pin 18 viene collegato a massa, il software invia un segnale su dbus ed il sistema va in shutdown, questo risulta estremamente utile quando il modulo base e` installato headless, cioè senza tastiera e video collegati.