Go Down

Topic: Modulo Wi-Fi ESP8266 (Read 602748 times) previous topic - next topic

busco

Code: [Select]

#include <WiFi.h>
#include <esp_now.h>
#include "ESPAsyncWebServer.h"
#include <Arduino_JSON.h>
String programma="ESP-now_trasmette_17-10-20_01";
const char* ssid = "xxxxxxxx-xxxxxxx";
const char* pass = "yyyyyyyyyyyyyyyy";
const int LED1 =16;
const int LED2 =17;
typedef struct message {
  char text[32];
};
struct message myMessage;

JSONVar board;

AsyncWebServer server(80);
AsyncEventSource events("/events");
//------------------------------
void onDataReceiver(const uint8_t * mac, const uint8_t *incomingData, int len) {
  Serial.print("Messaggio ricevuto da Mac: ");
  memcpy(&myMessage, incomingData, sizeof(myMessage));
  for (int i = 0; i < 6; i++) {
    Serial.print("0x");
    Serial.print(mac[i], HEX);
    Serial.print(":");
  }
  Serial.println();
  if(strcmp(myMessage.text,"rosso")){
    Serial.println("VERDE");
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,LOW);
  }else{
    Serial.println("ROSSO");
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,HIGH);
  } 
}
//-----------------------------------------
void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();

  //WiFi.begin(ssid, pass);
  //while (WiFi.status() != WL_CONNECTED) {
     digitalWrite(LED1,HIGH);
     delay(250);
     digitalWrite(LED1,LOW);
     delay(250);
     Serial.print(".");
  //}
 
  // Get Mac Add
  Serial.print("Mac Address: ");
  Serial.println(WiFi.macAddress());
  Serial.println("ESP32 ESP-Now Broadcast");
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  delay(500);
  // Initializing the ESP-NOW
  if (esp_now_init() != 0) {
    Serial.println("Problem during ESP-NOW init");
    return;
  }
  esp_now_register_recv_cb(onDataReceiver);
  Serial.println(programma);
}
//-------------------------------
void loop() {
  delay(500);
  yield();
}

Questo è il codice caricato su una ESP32 cosi com'è riceve senza problemi da una ESP8266
vedi in setup() alcune righe sono state commentate.


La ESP8266 impostata come WiFi.mode(WIFI_AP)

Seguendo le istruzioni qui: https://randomnerdtutorials.com/esp32-esp-now-wi-fi-web-server/
dove il codice dovrebbe prevedere la connessione AP e ESP-now

impostando
WiFi.mode(WIFI_AP_STA);
ma anche WiFi.mode(WIFI_STA);
e
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
 

}
Carica il programma senza problemi ma
la comunicazione non avviene più.



ORSO2001

ciao,

sucsa ma per me non è chiaro cosa non ti funziona.
comunque...le ESP (chiamiamole sender) che devono inviare i dati, tramite ESPNOW alla ESP (chiamiamola receiver), devono essere impostate come STA; la ESP receiver, che (la dico in modo spartano) dovrà creare la sua rete WIFI deve essere impostata come AP_STA.
anch'io dovrò fare un sistema del genere, con sole ESP32 però, per questo avevo trovato quel sito, ma non a brevissimo...sono ancora in fase di studio di come impostare il tutto...quindi mi interessa vedere come procederà il tuo di progetto :D

busco

Ciao

Ho fatto queste prove:

ESP8266 sender               ESP32 receiver
 --------------------  --------------------------
 WiFi.mode(WIFI_AP);      WiFi.mode(WIFI_STA);    esp-now OK
 WiFi.mode(WIFI_STA);    WiFi.mode(WIFI_STA);    esp-now OK
 Una o l'altra                      WiFi.mode(WIFI_AP_STA); esp-now NO


Se oltre alle prime due impostazioni suddette OK
Nella ESP32 receiver imposto anche il collegamento alla rete WiFi  

 WiFi.begin(ssid, pass);
 while (WiFi.status() != WL_CONNECTED) {
    delay(250);
    Serial.print(".");
 }
 
la comunicazione esp-now non funziona più.         

ORSO2001

#2898
Oct 19, 2020, 04:03 pm Last Edit: Oct 19, 2020, 04:05 pm by ORSO2001
ciao

penso che il problema sia dovuto al "canale" (channel) che deve essere, per il lato ESPNOW, lo stesso del WIFI.

per fare questo prova a fare:

Code: [Select]
int32_t getWiFiChannel(const char *ssid) {
  if (int32_t n = WiFi.scanNetworks()) {
      for (uint8_t i=0; i<n; i++) {
          if (!strcmp(ssid, WiFi.SSID(i).c_str())) {
              return WiFi.channel(i);
          }
      }
  }
  return 0;
}


e poi nel setup()

Code: [Select]
int32_t channel = getWiFiChannel(WIFI_SSID);



Code: [Select]
  esp_wifi_set_promiscuous(true);
  esp_wifi_set_channel(channel, WIFI_SECOND_CHAN_NONE);
  esp_wifi_set_promiscuous(false);



questo va fatto segli esp sender

busco

Ciao
getWiFiChannel() mi restituisce il canale nel mio caso 4.

queste funzioni da inserire nel sender
non esistono nella libreria #include <esp_now.h>
Necessita qualche altra libreria?
Code: [Select]
  esp_wifi_set_promiscuous(true);
  esp_wifi_set_channel(channel, WIFI_SECOND_CHAN_NONE);
  esp_wifi_set_promiscuous(false);



ORSO2001

ciao...dovrebbero essere comandi "diretti" di espressif
Quote
esp_err_t
Code: [Select]
esp_wifi_set_channel
(uint8_t primary, wifi_second_chan_t second)
Set primary/secondary channel of ESP8266.
Attention1. This is a special API for sniffer Attention2. This API should be called after esp_wifi_start() or esp_wifi_set_promiscuous()Return
  • ESP_OK: succeed
  • ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
  • ESP_ERR_WIFI_IF: invalid interface
  • ESP_ERR_INVALID_ARG: invalid argument

 Parameters
Code: [Select]
primary
: for HT20, primary is the channel number, for HT40, primary is the primary channel[/li]
[li]
Code: [Select]
second
    : for HT20, second is ignored, for HT40, second is the second channel[/li]
[/quote]

ho anche trovato QUESTO

busco

Questo cosi com'è funziona
https://randomnerdtutorials.com/esp32-esp-now-wi-fi-web-server/

Io però vorrei utilizzare delle ESP8266 come sender.



ORSO2001

Quindi il problema sembra essere la esp8266 ? Io non posso provare perché ho solo esp32..

Go Up