ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

ondyy
Příspěvky: 18
Registrován: 29 úno 2020, 23:32
Reputation: 0

ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od ondyy » 11 dub 2020, 12:34

Zdravím,

potřeboval bych zařídit komunikaci mezi dvěma zařízeními ESP-01 (žádné NodeMCU, pouze ESP-01). K dispozici mám Arduina Nano. Představuji si to tak, že jedno ESP bude spojené s Arduinem a např. na displeji se bude zobrazovat teplota získaná z teplotního čidla, které bude připojené na druhé ESP-01.

Vzhledem k tomu, že zařízení budou umístěna v místě, kde není Wi-Fi, potřebuji zařídit komunikaci bez jakýchkoli dalších síťových prvků.

Prosím o rady, zda je to možné a co k tomu potřebuji.

Děkuji

jankop
Příspěvky: 651
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od jankop » 11 dub 2020, 17:33

Na co tam bude to Arduino? Na ten displej bude někdo často koukat? Nemohlo by to být jen přes Android mobil?

ArduXPP
Příspěvky: 299
Registrován: 14 pro 2017, 19:31
Reputation: 0

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od ArduXPP » 11 dub 2020, 19:17

Ten esp8266 se musí přepnout do AP nebo Both. Příkaz :
STA = 1
AP = 2
Both = 3
AT+CWMODE=2 nebo 3, dle toho, co budeš chtít využít.

Příkazem AT+CWMODE? se dozvíš v jakém režimu je.


0 – je přístupný všem, bez hesla.
2 – WPA_PSK
3 – WPA2_PSK
4 – WPA_WPA2_PSK


AT+CWSAP=”ESP”,”heslo”,1,4 jednička je kanal, a čtyřka je WPA_WPA2_PSK .

AT+CIPSERVER=1,80 jednička je pro připojení více zařízení a 80 je port.

pavel1tu
Příspěvky: 1452
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od pavel1tu » 11 dub 2020, 20:12

Jaká vzdálenost ?
Zdi ?

Já v tomto případě kdy se nepřipojuji k AP jdu buď na 2,4G nRF24 (levný),
ale spíše na nižší frekvence (433MHz - lépe prolezou zdí) - na to jsou různé moduly, ale FM modulaci, ne AM - ty fungují tak na 5m ?
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

ondyy
Příspěvky: 18
Registrován: 29 úno 2020, 23:32
Reputation: 0

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od ondyy » 12 dub 2020, 17:45

Displej bych tam chtěl mít - minimálně možnost dostat hodnotu z teplotního čidla do Arduina. Nevím, jestli na druhém konci, kde bude připojen teplotní senzor bude taky potřeba Arduino pro zpracování hodnoty z DHT22.

Vzdálenost bude třeba cca 100 m, jedno zařízení s displejem bude doma, druhé s teplotním čidlem venku.

jankop
Příspěvky: 651
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od jankop » 12 dub 2020, 20:36

Já jsem chtěl jen naznačit, že nechápu, proč tam dávat Arduino, když tam bude ESP8266. Ten má větší RAM, Flash, je výkonnější než Arduino. Když tam přidáš další Arduina, tak to všechno jen zkomplikuješ.

ArduXPP
Příspěvky: 299
Registrován: 14 pro 2017, 19:31
Reputation: 0

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od ArduXPP » 12 dub 2020, 21:50

Já to chápu, má verzi esp-01, ten má omezení pinu, je určen pro komunikace s MCU.

jankop
Příspěvky: 651
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od jankop » 12 dub 2020, 23:29

ESP8266-01 má čtyři I/O piny. Na I2C displej a na pár teploměrů je to dostatek.

ondyy
Příspěvky: 18
Registrován: 29 úno 2020, 23:32
Reputation: 0

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od ondyy » 13 dub 2020, 11:17

Dobře, ale vůbec nevím, jak nastavit ty ESP tak, aby se mezi sebou spojily - nenašl jsem žádný vhodný návod pro ESP-01 spojení bez routeru. Chtěl bych dostat hodnotu např. z teplotního čidla do Arduina a moci s ní (s tím číslem) nějak pracovat.

RomanB
Příspěvky: 57
Registrován: 04 zář 2017, 14:28
Reputation: 0
Bydliště: Havířov

Re: ESP-01 - Komunikace mezi dvěma zařízeními (bez routeru)

Příspěvek od RomanB » 13 dub 2020, 12:29

ESP8266 (používám WEMOS mini) co přijímá nastav jako AP. Zde ESP8266 reaguje na připojení od ESP8266 s čidlem nebo na dotaz z internetového prohlížeče (je nutné připojit wifi na AP ESP).
ESP obslouží max 4 klienty.
Na této ESP mám připojený NOKIA displej:

Kód: Vybrat vše

#include <U8g2lib.h>
#include <ESP8266WiFi.h>       //nacteni knihovny ESP8266

WiFiServer server(80);         //definice serveru na portu HTTP 80

U8G2_PCD8544_84X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ D5, /* data=*/ D7, /* cs=*/ D6, /* dc=*/ D8, /* reset=*/ D3);

//U8G2_PCD8544_84X48_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ D6, /* dc=*/ D8, /* reset=*/ D3);     // Nokia 5110 Display 

String cidlo;


void setup() {
  
Serial.begin(9600);                //seriova komunikace na 9600

WiFi.mode(WIFI_AP);                //volba modu jako prostupovy bod

WiFi.softAP("WEMOS");              //nazev naseho AP 

Serial.print("AP IP addresa: ");
Serial.println(WiFi.softAPIP());   //vypis IP adresy, ktera je nastavena na 
                                //192.168.4.1
server.begin();                    //spusteni serveru

u8g2.begin();

  u8g2.clearBuffer();                 // clear the internal memory
  u8g2.setFont(u8g2_font_8x13B_mf); // choose a suitable font
  u8g2.drawStr(35,10,"IP");  // write something to the internal memory
  u8g2.setFont(u8g2_font_6x12_mf);
  u8g2.setCursor(0,20);
  u8g2.print(WiFi.softAPIP());
  u8g2.sendBuffer();                  // transfer internal memory to the display

}

void loop() {


WiFiClient client = server.available();   // cekani na pripojeni klienta


 if (client)     {                        //podminka o pripojeni klienta, ESP zvlada pripojit max 4 clienty 

String text = client.readString(); 
Serial.println(text);                     // vypis klientova pozadavku na seriový port

if ( text.substring(0,1) == ("W") )  {    //podminka v podmince ceka na data z cidla WEMOS

     cidlo = text;
     
  String TEP = cidlo.substring(8,12);   
  String TLA = cidlo.substring(15,21);  
  String VLH = cidlo.substring(24,28);  
  
  u8g2.setFont(u8g2_font_6x12_mf);
  
  u8g2.setCursor(0,30);
  u8g2.print(TEP);

  u8g2.setCursor(0,39);
  u8g2.print(TLA);

  u8g2.setCursor(0,48);
  u8g2.print(VLH);
  
  u8g2.sendBuffer();  
                                                           
     client.flush();  
  
  }

else if ( text.substring(0,1) == ("G") )  {     //podminka v podmince ceka na internetovy prohlizec,
                                                //ktery vysle hned na zacatku GET ...
                                                         
     String TEP = cidlo.substring(8,12);   Serial.print("Teplota: ");Serial.println(TEP);
     String TLA = cidlo.substring(15,21);  Serial.print("Tlak: ");   Serial.println(TLA);
     String VLH = cidlo.substring(24,28);  Serial.print("Vlhkost: ");Serial.println(VLH);  
                                                     
     client.print("Teplota: "); client.println(TEP);
     client.print("Tlak: ");    client.println(TLA);
     client.print("Vlhkost: "); client.println(VLH);
     
     client.flush();  
  
  }
 
                    
}
 
}


Vysílací ESP8266 je nastavená jako STA stanice. Čidlo je BME280 a posílá data co 2s:

Kód: Vybrat vše

#include <ESP8266WiFi.h>              //nacteni knihovny
#include <Adafruit_BME280.h>

byte wemosIP[] = { 192, 168, 4, 1 };  //IP adresa serveru, 
                                      //na ktery chceme posilat data
WiFiClient client;                    //definice nazvu klienta

Adafruit_BME280 bme280;

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

if (!bme280.begin(0x76)) {
  Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
  while (1) ;
  }


WiFi.mode(WIFI_STA);                   //volba modu jako stanice
WiFi.begin("WEMOS");                   //nazev AP stanice, ke ktere 
                                        //se chceme pripojit
while (WiFi.status() != WL_CONNECTED) {
       delay(500);                     //dokud nedojde k pripojeni k AP
       Serial.print("."); }            //vypisuje same tecky    
    
Serial.println(WiFi.localIP());        //vypise nasi úridelenou IP adresu

}

void loop() {

float tlak = ((bme280.readPressure() / 100.0F) + 30); String tl = String (tlak,1);

float teplota = bme280.readTemperature(); String te = String (teplota,1);

float vlhkost = bme280.readHumidity(); String vl = String (vlhkost,1);
 
  client.connect( wemosIP , 80); 

  client.print("WEMOS");
  client.print(String("TEP") + te);
  client.print(String("TLA") + tl);
  client.print(String("VLH") + vl);

  client.stop();                      //odpojime se od serveru 

delay(2000);                           //cekani 2 sekundy

}
Program mám 2 roky starý, tak to prosím ber jako návod, momentálně neodzkoušeno.

Na vysílací straně nemám zpětnou vazbu o příjmu hodnot(nebo vůbec o připojení k AP), bylo by vhodné to nějak ošetřit.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host