Alessandro Pagiaro e Mario Salinas
Abbiamo fatto ciò che non dovevamo fare...
... scegliere prima l'hardware e poi capire come usarlo
(La parte divertente)
Collegamento seriale puro, dove vengono mandati dei pacchetti JSON contenente i dati raccolti.
Rete Mesh ad hoc simulata tramite una serie di connessioni punto-punto.
Collegamento seriale (o alternativamente Wifi) che raccoglie tutti i pacchetti della rete e li manda al server che li elaborerà
{
"from" : uint32_t idServer,
"updat_number" : int currentUpdateNumber,
"sender_id" : uint32_t prevHopId,
"type" : 0
}
Alternativamente si potrebbe usare l'RSS.
int lastPId[30];
uint32_t lastCId[30];
int update, lastSyncTime
void discoveryTree(){
char msg[256];
sprintf(msg, "{\"from\": %d, \"update_number\": %d, \"sender_id\": %d,
\"type\": 0}", mesh.getChipId(), ++update, mesh.getChipId());
/*Prevent overflow*/
if(update == INT_MAX)
update = 0;
String p(msg);
mesh.sendBroadcast(p);
lastSyncTime = mesh.getNodeTime();
return;
}
void receivedCallback( uint32_t from, String &msg_str ){
JsonObject& msg = jsonBuffer.parseObject(msg_str);
int type = msg["type"];
switch(type){
case(DISCOVERY_REQ):{
if(msg["update_number"] > update){
update = msg["update_number"];
nextHopId = msg["sender_id"];
propagateDiscovery(msg);
lastSyncTime = mesh.getNodeTime();
}
}break;
[...]
}
}
void receivedCallback( uint32_t from, String &msg_str ){
JsonObject& message = jsonBuffer.parseObject(msg_str);
int type = message["type"];
if(type!=DISCOVERY_REQ)
printJson(message);
}
La stazione Arduino viene simulata direttamente su un ESP-01.
void loop(){
[...]
char msg[100];
sprintf(msg, "{\"temp\": %f}", getTemp());
mesh.sendBroadcast(msg);
}
Tale semplificazione è giustificabile dal fatto che nel caso in cui si hanno due sensori di raccolta dati, questi possono essere raccolti direttamente con un ESP-01 senza necessità di un microcontrollore esterno.
Abbiamo 3 ESP-01, quello connesso al server ignora i pacchetti che gli arrivano dal primo
void receivedCallback( uint32_t from, String &msg_str ){
if(from == 2008034 /*ID dell'ESP-01 che genera i dati*/)
return;
[...]
}
void deepSleep(int milliseconds){}
spegne si la radio, ma poi riparte la funzione di setup, è praticamente un RESET!!!!!I dati raccolti non vengono analizzati ma semplicemente salvati su un server (ThingSpeak)
Let's start!