Go Down

Topic: Modulo Wi-Fi ESP8266 (Read 607093 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..

lucavigna

scusate se mi intrometto al post.
ho un esp01 collegato ad un dht22. ho problemi di ricezione dati su app blynk.
esp01 e dht22 stanno utilizzando i 3.3v di un altro arduino (al momento non ho sottomano un alimentatore 3v)
puo essere questo il problema? che arduino non riesce a dare i 3.3v ad entrambe le schede? (esp01-8266 e dht22 basettato)

zoomx

Si, Arduino non ce la fa ad alimentare un ESP01. Si accende ma non riesce a comunicare in WiFi.

gpb01

>lucavigna: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato nella sezione "Generale" del forum è stato cancellato.

Ti prego, per il futuro, di evitare di aprire più post sullo stesso argomento in sezioni differenti del forum. Grazie.

Guglielmo
Search is Your friend ... or I am Your enemy !

lucavigna

#2906
Nov 12, 2020, 05:10 pm Last Edit: Nov 12, 2020, 05:16 pm by lucavigna
Si, Arduino non ce la fa ad alimentare un ESP01. Si accende ma non riesce a comunicare in WiFiprima ho collegato
ciao zoomx, prima però ho collegato tutto con alimentatore da 3.5v.
carico lo sketch su esp01-8266 e va a buon fine. apro Blynk e vedo la scheda connessa.
imposto i virtual pin v5 e v6 ma nulla. mi restituiscono valori errati.
ti allego lo sketch. non riesco proprio a capire. ho 2 esp01 diversi e con entrambi fa cosi.
l'esp01 è collegato cosi : 3.5v a vcc e ch_pd    gng al gnd   gpio2 al sensore dht22 (con resistenza da 10k)
se tolgo la resistenza mi da valore 0, se la metto -35000 e qualcosa
Code: [Select]

define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "***********************";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "***************";
char pass[] = "***************";

#define DHTPIN 2          // What digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22, AM2302, AM2321

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11     // DHT 11

//#define DHTTYPE DHT21   // DHT 21, AM2301

DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.

void sendSensor()
{
  int h = dht.readHumidity();
  int t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
}

void setup()
{
  // Debug console
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  //You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);

  dht.begin();

  // Setup a function to be called every second
  timer.setInterval(1000L, sendSensor);
}

void loop()
{
  Blynk.run();
  timer.run();
}

questi sono quelli che sto usando:

lucavigna

>lucavigna: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato nella sezione "Generale" del forum è stato cancellato.

Ti prego, per il futuro, di evitare di aprire più post sullo stesso argomento in sezioni differenti del forum. Grazie.

Guglielmo
ok scusate, volevo aprire un topic proprio mio per parlare di questi problemi che sto avendo.

gpb01

#2908
Nov 12, 2020, 05:19 pm Last Edit: Nov 12, 2020, 05:19 pm by gpb01
ok scusate, volevo aprire un topic proprio mio per parlare di questi problemi che sto avendo.
... se c'è un thread dedicato ad ESP8266 ed uno ad ESP32 è perché, NON essendo oltretutto prodotti Arduino, è meglio porre le domande nei thread dedicati ;)

Se non lo si fa, almeno si eviti il cross-posting ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

... l'esp01 è collegato cosi : 3.5v a vcc e ch_pd    gng al gnd   gpio2 al sensore dht22 (con resistenza da 10k)
... sai disegnare uno schema? Ecco, disegna lo schema esatto con TUTTI i collegamenti, anche quelli con il sensore e le alimentazioni.

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up