• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP8866(Client) + ESP8866(Server)

SergEgois

New member
Как сделать что бы платы могли обмениваться сообщениями через WIFI?
Поделитесь исходниками пожалуйста
 

NeoroN

Member
По моему в документации все понятно расписанно как для Arduino так и для Nodemcu - нет техзадания = нет кода.
 

SergEgois

New member
По моему в документации все понятно расписанно как для Arduino так и для Nodemcu - нет техзадания = нет кода.
Мне нужно что бы при нажатию кнопки на одной Esp8266 на второй загорался светодиод. Дайте хоть какой то исходник - буду курить его.
 

NeoroN

Member
Сервер для включения светодиода
и примерно такой клиент для кнопки
Код:
wifi.setmode(wifi.STATION)
wifi.sta.config({ssid="test",pwd="12345678"})
gpio.mode(1, gpio.INT, gpio.PULLUP)
function button_cb(level, timeout)
http.get("http://192.168.4.1/?pin="+(level == gpio.HIGH  and "OFF" or "ON"), nil, function(code, data) print(code, data) end)
gpio.trig(1, level == gpio.HIGH  and "down" or "up")
end
gpio.trig(1, "down", button_cb)
 

SergEgois

New member
Сервер для включения светодиода
и примерно такой клиент для кнопки
Код:
wifi.setmode(wifi.STATION)
wifi.sta.config({ssid="test",pwd="12345678"})
gpio.mode(1, gpio.INT, gpio.PULLUP)
function button_cb(level, timeout)
http.get("http://192.168.4.1/?pin="+(level == gpio.HIGH  and "OFF" or "ON"), nil, function(code, data) print(code, data) end)
gpio.trig(1, level == gpio.HIGH  and "down" or "up")
end
gpio.trig(1, "down", button_cb)

А есть код как обмениваться данными не через веб сервер а как через точку доступа?
 

NeoroN

Member
нету, мне его лень писать...
Точнее не понятно что хочет автор.
Код точкадотупа+вебсервер и клиент+гетзапрос - ему не нравятся, хотя для кнопки и светодиода вполне хватит. Вот пусть сам разберется что он хочет и напишет подробно что, для чего чем управлять - может он терорист какой и бомбы там собирает, с кнопками смертника.
 
Последнее редактирование:

SergEgois

New member
автор хочет халявы, так как сегодня суббота.
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>

const char *ssid = "ssid";
const char *password = "12345678";
const char *host = "192.168.7.1";
int channel = 5;

WiFiServer server(8008);
long qqq = 0;

void setup() {
  WiFi.persistent(false);
  Serial.begin(9600);
  delay(10);
  Serial.println();
  initWiFi();
  server.begin();
}


void loop() {
  yield();
  WiFiClient client = server.available();   // listen for incoming clients

  if (client) {                             // if you get a client,
    Serial.println("new client");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        currentLine = client.readStringUntil('\r');
        Serial.println(currentLine);
         Serial.println(client.read());
        initWiFi();
        ESP.wdtFeed();
        yield();
      }
    }
    // close the connection:

    client.flush();
    client.stop();
    Serial.println("client disonnected");
  } 
}

void initWiFi(void) {

  IPAddress Ip(192, 168, 1, 1);
  IPAddress NMask(255, 255, 255, 0);

  WiFi.mode(WIFI_AP);
  Ip.fromString(host);
  WiFi.softAPConfig(Ip, Ip, NMask);
if (!WiFi.softAP( ssid, password,channel,0))
  {
   Serial.println("WiFi.softAP failed.(Password too short?)");
   return;
  }
  IPAddress myIP = WiFi.softAPIP();
  Serial.println();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  long rssi = WiFi.RSSI();
  long qqq = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm"); 

}
вот код сервера, принимает без веба. а клиент как сделать?

то есть если кнопка значит террорист? мне текст нужно передавать, за кнопку так написал чтобы вопросов не было, думал проще будет
 

NeoroN

Member
на Lua я бы еще написал - там пару строк всего писать, на сишнике - точно нет - слишком много писанины (не интересно). Если ардуинщики не сжалются - то все есть в стандартных примерах.
 

Grem_line

New member
Самое простое - один делаешь SoftAP, а другой к нему подключается. После этого в цикле передаешь от одного к другому UDP-пакеты на какой-нибудь порт, скажем, 10 раз в секунду. На втором принимаешь эти пакеты. Ну и в первом байте нулевым битом (например) каждого пакета передаешь состояние кнопки. Нужно только знать IP-адрес того, кто принимает пакеты. Лучше принимать в AP - там IP-адрес будет всегда один и тот-же.
 

Grem_line

New member
Вот пример SoftAP, работающая как приемник (зажигает светодиод при нажатии кнопки на передатчике:
Код:
#include <ESP8266WiFi.h>
#include <WiFiUDP.h> 

const char* ssid = "TEST";
const char* password = "Gacdert123";
WiFiUDP Udp;

void setup() {
  // будем мигать встроенным светодиодом
  pinMode(LED_BUILTIN, OUTPUT); 
  Serial.begin(115200);
  Serial.printf("\nStart of program\n");
 
  WiFi.softAP(ssid, password);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  Udp.begin(12345);
}

unsigned char Buf[1500]; // Буфер для приема пакета

void loop() {
 Udp.parsePacket();
 int sz = Udp.available();
 if (sz)
 {
  Udp.read(Buf,sz);
  digitalWrite(LED_BUILTIN, Buf[0]);
}
 
  • Like
Реакции: kab

Grem_line

New member
А вот пример передатчика с кнопкой на D0 (все в среде Ардуино)
Как видите - примеры совсем простые.
Код:
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
const char* ssid = "TEST";
const char* password = "Gacdert123";
WiFiUDP Udp;
IPAddress ip_host (192, 168, 4, 1); // Нужно подставить адрес AP

void setup() {
  pinMode(D0, INPUT);
  delay(1000);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("\nConnecting to "); Serial.println(ssid);
  while (WiFi.status() != WL_CONNECTED)
  delay(500);
  Serial.print(".");
  }
  Serial.println("\nConnected!");
  delay(1000);
  Serial.print("Local IP = ");
  Serial.println(WiFi.localIP());
  Udp.begin(12345);
}
void loop(){
   uint8_t data = digitalRead(D0); // Считываем состояние входа
   Udp.beginPacket(ip_host,12345); // Формируем пакет на порт 12345
   Udp.write(data);
   Udp.endPacket(); // Выдаем пакет
   delay(100);
}
 
  • Like
Реакции: kab

thoicb12

New member
А вот пример передатчика с кнопкой на D0 (все в среде Ардуино)
Как видите - примеры совсем простые.
Код:
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
const char* ssid = "TEST";
const char* password = "Gacdert123";
WiFiUDP Udp;
IPAddress ip_host (192, 168, 4, 1); // Нужно подставить адрес AP

void setup() {
  pinMode(D0, INPUT);
  delay(1000);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("\nConnecting to "); Serial.println(ssid);
  while (WiFi.status() != WL_CONNECTED)
  delay(500);
  Serial.print(".");
  }
  Serial.println("\nConnected!");
  delay(1000);
  Serial.print("Local IP = ");
  Serial.println(WiFi.localIP());
  Udp.begin(12345);
}
void loop(){
   uint8_t data = digitalRead(D0); // Считываем состояние входа
   Udp.beginPacket(ip_host,12345); // Формируем пакет на порт 12345
   Udp.write(data);
   Udp.endPacket(); // Выдаем пакет
   delay(100);
}
hi Grem_line
Can you give me examples of switched on off leds. Your post is enabled but not disabled
 
Сверху Снизу