comunicazione Seriale fra ESP8266 NodeMCU e Arduino Mega2560

173 views
Skip to first unread message

Matteo B.

unread,
Jan 20, 2018, 6:37:56 AM1/20/18
to souliss-it
Buongiorno, attualmente ho correttamente funzionante un Arduino Uno+WZ5100 come GW che parla in seriale con un PEER MEGA2560 correttamente funzionante ma vorrei sostituire il GW in quanto instabile e non adatto con un ESP8266 NodeMCU.
La cosa più semplice mi è sembrato ripristinare la comunicazione seriale fra i 2 ma non ne vengo a capo e mi sorgono dubbi sia sul collegamento che sugli sketch.
Poi vorrei trasformare il tutto il RS485.
Allego quanto fatto.
Chiedo aiuto. Grazie
Gateway_domoticaESP8266.ino
Peer1_Luci_CasaESP8266EVO.ino

Matteo B.

unread,
Jan 20, 2018, 5:54:16 PM1/20/18
to souliss-it


Risolto, allego sketch se possono servire.
GatewayOK.ino
Peer1.ino

Saverio Sbrana

unread,
Jan 21, 2018, 5:38:54 AM1/21/18
to souliss-it
Ciao, ho dato un'occhiata veloce al codice e ci sono delle cose non necessarie:

nel gw:
#include "conf/Gateway.h"                   //OK GATEWAY
#include "conf/SuperNode.h"                 // NON SERVE il gateway è sempre supernode
#include "conf/IPBroadcast.h"               // non serve hai un peer rs485 non ip

SetAddress(0xAB01, 0xFF00, 0x0000);  // rete non necessaria
    SetAddress(0xD001, 0xFF00, 0x0000); 


    FAST_GatewayComms();  // OK
        FAST_BridgeComms();       // fai due volte la stessa cosa non inserire è già dentro gatewaycomms 



// questa sotto non mi torna
ogni 50 secondi chiedi al dht la temperatura, e la metti correttamente dentro la memoria di souliss nell'input
però interroghi la memoria di input  se ci  sono cambiamenti per processarla ogni 10 secondi , è inutile 4 volte

SLOW_10s()  {

            Logic_T58(HUMIDITY);
            Logic_T52(TEMP0);
                     
        }
        
        SLOW_50s()  {
          float humidity = dht.readHumidity();
          float temperature = dht.readTemperature(false);
          if (!isnan(humidity) || !isnan(temperature)) {
            ImportAnalog(HUMIDITY, &humidity);
            ImportAnalog(TEMP0, &temperature);
          }
        }   


puoi fare:
 
SLOW_50s()  {
          float humidity = dht.readHumidity();
          float temperature = dht.readTemperature(false);
          if (!isnan(humidity) || !isnan(temperature)) {
            ImportAnalog(HUMIDITY, &humidity);
            ImportAnalog(TEMP0, &temperature);
                        Logic_T58(HUMIDITY);
            Logic_T52(TEMP0);
          }
        }   



nel peer c'è solamente una cosa:
START_PeerJoin(); // non serve hai già l'indirizzo e non lo devi chiedere al gw che ti conosce già



FAST_510ms() { ... }  // hai tantissime cose da fare, magari potresti dividere le logiche con le prime 10 in 110ms e le seconde a 210ms 
ma se ti funziona bene e non hai problemi di comunicazione puoi lasciarlo, è sempre rischioso fare troppe cose dentro un'unico ciclo ti potrebbe far saltare le tempistiche di comunicazione

Matteo B.

unread,
Jan 21, 2018, 7:25:01 AM1/21/18
to souliss-it
Ciao, grazie dei suggerimenti.

Ciò che è legato alla rete IP è rimasto inserito in quanto vorrei espandere ulterioremente la rete, quindi anche se non necessario per il momento è rimasto nello sketch.
Per quanto riguarda la Logic_T58 e T52 hai pienamente ragione.
Grazie,  
Reply all
Reply to author
Forward
0 new messages