Wemos Mega + Wifi Esp8266

Ho comprato questo WEMOS.
ho caricato questo sketch sul esp8266 quindi mettendo i piendini

1 = OFF
2 = OFF
3 = OFF
4 = OFF
5 = ON
6 = ON
7 = ON
8 = OFF

#include <Timezone.h>    // https://github.com/JChristensen/Timezone
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiClient.h>
IPAddress timeServer(192, 168, 1, 1); 
const char* host = "www.miosito.it";
const char* ssid = "Vodafone";
const char* password =  "123456789";
byte mac[6]; 
char VedoMAC[18];
String ipStr,cmd,req,schermo,StringArrivo,StringaInvio;
char CrtARRIVO;
char hostString[15] = {0};
unsigned long RefreshTempo=0L; 
String QuestaDATA="";

WiFiServer server(80);

// Central European Time (Frankfurt, Paris, Rome)
TimeChangeRule CEST = {"CEST", Last, Sun, Mar, 2, 120};     // Central European Summer Time
TimeChangeRule CET = {"CET ", Last, Sun, Oct, 3, 60};       // Central European Standard Time
Timezone CE(CEST, CET);



void setup()
{
  Serial.begin(115200);

 
  // Connect to WiFi network
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password); delay(1000);
  Serial.print("\n\n");
  Serial.print("Connessione");
  while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); }
  Serial.println( (millis()/1000L) );
  
  WiFi.macAddress(mac);
  IPAddress ip = WiFi.localIP();
      
  sprintf(hostString, "ESP_%06X", ESP.getChipId());
  Serial.print("Hostname: "); Serial.println(hostString);
  WiFi.hostname(hostString);
  
  Serial.print("Connected to "); Serial.println(ssid);
  
  ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
  Serial.print("IP address: ");  Serial.println(ipStr);
  sprintf(VedoMAC, "%2X:%2X:%2X:%2X:%2X:%2X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
  Serial.print("MAC:\t"); Serial.println(VedoMAC); 
  
  // Set up mDNS responder:
  // - first argument is the domain name, in this example
  //   the fully-qualified domain name is "esp8266.local"
  // - second argument is the IP address to advertise
  //   we send our IP address on the WiFi network
  if (!MDNS.begin("esp8266")) 
  {
    Serial.println("Error setting up MDNS responder!");
    while (1) {delay(1000);}
  }
  Serial.println("mDNS responder started");

  // Start TCP (HTTP) server
  server.begin(); Serial.println("TCP server started\n");

  // Add service to MDNS-SD
  MDNS.addService("http", "tcp", 80);
  Serial.println("Sending mDNS query");

  
  int n = MDNS.queryService("esp", "tcp"); // Send out query for esp tcp services
  Serial.println("mDNS query done");
  if (n == 0) {
    Serial.println("no services found");
  } else {
    Serial.print(n);
    Serial.println(" service(s) found");
    for (int i = 0; i < n; ++i) {
      // Print details for each service found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(MDNS.hostname(i));
      Serial.print(" (");
      Serial.print(MDNS.IP(i));
      Serial.print(":");
      Serial.print(MDNS.port(i));
      Serial.println(")");
    }
  }

  
    setTime(CE.toUTC(compileTime()));
}

void loop()
{
  if( (millis()/1000L)>RefreshTempo)
  {  
    time_t utc = now();
    Serial.println();
    printDateTime(CE, utc, "Rome");
    RefreshTempo = (millis()/1000L)+60L;
 }

 


  StringArrivo="";
  while (Serial.available()) 
  {
    CrtARRIVO = (char)Serial.read();
    StringArrivo += CrtARRIVO;
    if (CrtARRIVO == '!') { StringArrivo.replace("!"," "); invioMYSQL(StringArrivo); }
  }

  
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) { return; }
  Serial.println("");
  //Serial.println("New client");

  // Wait for data from client to become available
  while (client.connected() && !client.available()) {
    delay(1);
  }

  // Read the first line of HTTP request
  req = client.readStringUntil('\r');

  // First line of HTTP request looks like "GET /path HTTP/1.1"
  // Retrieve the "/path" part by finding the spaces
  int addr_start = req.indexOf(' ');
  int addr_end = req.indexOf(' ', addr_start + 1);
  if (addr_start == -1 || addr_end == -1) 
  {
    Serial.print("Invalid request: ");
    Serial.println(req);
    return;
  }
  req = req.substring(addr_start + 1, addr_end);
  Serial.print("ARRIVO:");
  Serial.println(req);
  client.flush();

  if (req.indexOf("?")>-1) //if (req == "/") 
  {
    schermo = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>Hello from ESP8266 at ";
    schermo += ipStr;
    schermo += "
";
    schermo += req;
    schermo += "</html>\r\n\r\n";
    //Serial.println("Sending 200");
  } else {
    schermo = "HTTP/1.1 404 Not Found\r\n\r\n";
    //Serial.println("Sending 404");
  }
  client.print(schermo);

  //Serial.println("Done with client");


}

// Function to return the compile date and time as a time_t value
time_t compileTime()
{
    const time_t FUDGE(10);     // fudge factor to allow for compile time (seconds, YMMV)
    const char *compDate = __DATE__, *compTime = __TIME__, *months = "JanFebMarAprMayJunJulAugSepOctNovDec";
    char chMon[3], *m;
    tmElements_t tm;

    strncpy(chMon, compDate, 3);
    chMon[3] = '\0';
    m = strstr(months, chMon);
    tm.Month = ((m - months) / 3 + 1);

    tm.Day = atoi(compDate + 4);
    tm.Year = atoi(compDate + 7) - 1970;
    tm.Hour = atoi(compTime);
    tm.Minute = atoi(compTime + 3);
    tm.Second = atoi(compTime + 6);
    time_t t = makeTime(tm);
    return t + FUDGE;           // add fudge factor to allow for compile time
}

// given a Timezone object, UTC and a string description, convert and print local time with time zone
void printDateTime(Timezone tz, time_t utc, const char *descr)
{
    char m[4];    // temporary storage for month string (DateStrings.cpp uses shared buffer)
    TimeChangeRule *tcr;        // pointer to the time change rule, use to get the TZ abbrev

    time_t t = tz.toLocal(utc, &tcr);
    strcpy(m, monthShortStr(month(t)));
    //char buf[45];
    //sprintf(buf, "%s.%.2d/%s/%d.%.2d:%.2d:%.2d %s", dayShortStr(weekday(t)), day(t), m, year(t), hour(t), minute(t), second(t), tcr -> abbrev);
    //Serial.print("DATA: "); Serial.print(buf); Serial.print(' '); Serial.println(descr);

  QuestaDATA="";
  if ( day(t) < 10)    {QuestaDATA +="0";} QuestaDATA +=day(t); QuestaDATA +="/";
  if ( month(t) < 10)  {QuestaDATA +="0";} QuestaDATA +=month(t); QuestaDATA +="/";
  QuestaDATA +=year(); QuestaDATA +="..";
  if ( hour(t)   < 10) {QuestaDATA +="0";} QuestaDATA +=hour(t); QuestaDATA +=":";
  if ( minute(t) < 10) {QuestaDATA +="0";} QuestaDATA +=minute(t); QuestaDATA +=":";
  if ( second(t) < 10) {QuestaDATA +="0";} QuestaDATA +=second(t);
  Serial.print("DATA: "); Serial.println(QuestaDATA); 

}


void invioMYSQL(String DaInvio) 
{
  Serial.println("connecting to 'GET'");  
  WiFiClient client;
  if (!client.connect(host, 80)) {
    Serial.println("connection failed");
    return;
  }
  Serial.print("INVIO URL: " + DaInvio);
  StringaInvio += ""; 
  StringaInvio += DaInvio;
  StringaInvio += "&x6="; StringaInvio += QuestaDATA.substring(12,20); 
  StringaInvio += "&x7="; StringaInvio += QuestaDATA.substring(0,10); 
  StringaInvio += " HTTP/1.1\r\nHost: ";
  StringaInvio += host;
  StringaInvio += "\r\nConnection: close\r\n\r\n ";
  client.println(StringaInvio);
  delay(10);
  while(client.available()){
    cmd = client.readStringUntil('\r');
    Serial.print(cmd);
  }
  Serial.println("closing connection");
  cmd="";
}

dopo
1 = ON
2 = ON
3 = ON
4 = ON
5 = OFF
6 = OFF
7 = OFF
8 = OFF
oltre lo swicht su RX03 / TX03

carico quest’altro sketch sulla “sezione” arduino per farlo comunicare

String inString;
unsigned long tempo=0L;  

void setup() 
{
  Serial.begin(115200);
  Serial3.begin(115200);
}


void loop() {
  serialEvent();

}
void serialEvent() 
{
  inString="";
  while (Serial3.available()) 
  {
    char inChar = Serial3.read(); 
    Serial.write(inChar);
    inString += inChar;

    if (inChar == '\n') 
      {
        /// ALLA FINE QUANDO VEDE IL CARATTERE '\n' LA SERIALE
      }
   }
 if ((millis()/1000L) > tempo ) {Serial3.write("GET /pagina.asp?x3=CTRL!"); tempo=(millis()/1000L)+59L;}
}

Io sto usando questo metodo per far comunicare
ESP8266 invia tramite SERIAL ad ARDUINO/WEMOS
ARDUINO/WEMOS invia a ESP8266 tramite SERIAL3

E giusto? oppure c’è un metodo più sicuro e gia presente nelle libreria per far comunicare i due dispositivi presenti sulla scheda WEMOS MEGA
Grazie in anticipo…

Ricordo sempre che questo è il forum di Arduino.cc dove si fornisce assistenza per problemi relativi a problematiche che coinvolgono Arduino, i suoi collegamenti e la sua programmazione.

Quindi, ben vengano domande che riguardano moduli ESP8266 direttamente collegati ad Arduino, ma domande per moduli che nulla hanno a che vedere con Arduino, prodotti da altri produttori che hanno semplicemente utilizzato/sfruttato l'IDE per sviluppare un loro "core" e facilitare la programmazione delle loro schede, come le schede WeMos, sarebbe bene che venissero poste sul forum di supporto delle WeMos. Grazie.

Guglielmo

P.S.: Ciò non toglie che, se qualcuno avesse la risposta al tuo quesito, sicuramente cercherà di aiutarti :wink:

Ok compreso. Scusa e scusatemi.

bitmanrc:
Ok compreso. Scusa e scusatemi.

Nessun problema :slight_smile: e, come ho detto ...
... se qualcuno avrà una risposta al tuo quesito, sicuramente cercherà di aiutarti :wink:

Guglielmo