From 990bd6fb47bf777e67c49d856e9f5f1599ca9f16 Mon Sep 17 00:00:00 2001
From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com>
Date: Tue, 21 Apr 2020 01:20:56 +0200
Subject: [PATCH] add udp support for esp32
Device can see each other esp32 and esp8266 and send date
---
Upgrade.ino | 2 +-
{data => date_excess}/config-all.json | 0
date_excess/config-my.json | 18 +++
...2-esp8266_iot-manager_modules_firmware.ino | 3 +-
set.h | 128 ++++++++----------
udp.ino | 52 ++++---
6 files changed, 107 insertions(+), 96 deletions(-)
rename {data => date_excess}/config-all.json (100%)
create mode 100644 date_excess/config-my.json
diff --git a/Upgrade.ino b/Upgrade.ino
index daf6043e..26b46e79 100644
--- a/Upgrade.ino
+++ b/Upgrade.ino
@@ -23,7 +23,7 @@ void initUpgrade() {
jsonWriteStr(tmp, "title", "Последняя версия прошивки уже установлена.");
jsonWriteStr(tmp, "class", "pop-up");
} else {
- jsonWriteStr(tmp, "title", "Имеется новая версия прошивкиИдет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить");
+ jsonWriteStr(tmp, "title", "Имеется новая версия прошивкиИдет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить");
jsonWriteStr(tmp, "class", "pop-up");
}
} else {
diff --git a/data/config-all.json b/date_excess/config-all.json
similarity index 100%
rename from data/config-all.json
rename to date_excess/config-all.json
diff --git a/date_excess/config-my.json b/date_excess/config-my.json
new file mode 100644
index 00000000..9ce5891e
--- /dev/null
+++ b/date_excess/config-my.json
@@ -0,0 +1,18 @@
+{
+ "name": "IoTmanager",
+ "chipID": "",
+ "ssidAP": "WiFi",
+ "passwordAP": "",
+ "ssid": "rise",
+ "password": "hostel3333",
+ "timezone": 2,
+ "mqttServer": "mqtt.ioty.ru",
+ "mqttPort": 1883,
+ "mqttPrefix": "/rise",
+ "mqttUser": "test",
+ "mqttPass": "test",
+ "scenario": "1",
+ "pushingbox_id": "",
+ "web_login": "admin",
+ "web_pass": "admin"
+}
\ No newline at end of file
diff --git a/esp32-esp8266_iot-manager_modules_firmware.ino b/esp32-esp8266_iot-manager_modules_firmware.ino
index 6ba65886..6aed0d87 100644
--- a/esp32-esp8266_iot-manager_modules_firmware.ino
+++ b/esp32-esp8266_iot-manager_modules_firmware.ino
@@ -38,9 +38,10 @@ void setup() {
- ts.add(TEST, 5000, [&](void*) {
+ ts.add(TEST, 10000, [&](void*) {
getMemoryLoad("[i] periodic check of");
+
//String json = "{}";
//jsonWriteStr(json, "test6", GetTime());
//ws.textAll(json);
diff --git a/set.h b/set.h
index aa2fb388..11fb4619 100644
--- a/set.h
+++ b/set.h
@@ -1,175 +1,153 @@
-String firmware_version = "2.3.1";
-//-----------------------------------------------------------------
+//===============FIRMWARE SETTINGS=====================================
+String firmware_version = "2.3.2";
boolean mb_4_of_memory = true;
-String last_version;
-
-
//#define OTA_enable
//#define MDNS_enable
//#define WS_enable
-
//#define layout_in_ram
-
-#define TIME_COMPILING String(__TIME__)
-#define DATE_COMPILING String(__DATE__)
-//-----------------------------------------------------------------
#define wifi_mqtt_reconnecting 20000
-//-----------------------------------------------------------------
#define analog_update_int 5000
-//-----------------------------------------------------------------
#define temp_update_int 5000
-//-----------------------------------------------------------------
+
#define tank_level_shooting_interval 500 //интервал выстрела датчика
#define tank_level_times_to_send 20 //после скольки выстрелов делать отправку данных
-//-----------------------------------------------------------------
+
#define dhtT_update_int 10000
#define dhtH_update_int 10000
#define dht_calculation_update_int 10000
-//-----------------------------------------------------------------
+
#define statistics_update 1000 * 60 * 60 * 2
-//-----------------------------------------------------------------
+//======================================================================
+#define TIME_COMPILING String(__TIME__)
+#define DATE_COMPILING String(__DATE__)
-//==библиотеки и объекты для ESP8266==//
+//===============библиотеки и объекты для ESP8266========================
#ifdef ESP8266
#include
#include
-#ifdef MDNS_enable
-#include
-#endif
#include
#include
ESP8266HTTPUpdateServer httpUpdater;
+#include
+WiFiUDP Udp;
+
+#ifdef MDNS_enable
+#include
#endif
-//==библиотеки и объекты для ESP32==//
+#endif
+//===============библиотеки и объекты для ESP32===========================
#ifdef ESP32
#include
#include
-#ifdef MDNS_enable
-#include
-#endif
#include
#include
#include
#include
+#include "AsyncUDP.h"
+AsyncUDP udp;
+
+#ifdef MDNS_enable
+#include
#endif
-//==общие библиотеки и объекты==//
+#endif
+//===============общие библиотеки и объекты===============================
#include
#include "time.h"
+
#ifdef OTA_enable
#include
#endif
+
#include
#include
#include
+
#include
AsyncWebServer server(80);
+
#ifdef WS_enable
AsyncWebSocket ws("/ws");
#endif
+
AsyncEventSource events("/events");
-//---------------------------------------------------------------
#include
-//---------------------------------------------------------------
+
#include
TickerScheduler ts(30);
enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, DHTC, DHTP, DHTD, STEPPER1, STEPPER2, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, dhtT_LOG, dhtH_LOG, CMD, TIMER_COUNTDOWN, TIMERS, TIME, TIME_SYNC, STATISTICS, UDP, UDP_DB, TEST};
-//---------------------------------------------------------------
-//ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure
-//---------------------------------------------------------------
-#include
-WiFiUDP Udp;
-//---------------------------------------------------------------
+
#include
WiFiClient espClient;
-//ssl//WiFiClientSecure espClient;
+
PubSubClient client(espClient);
-//---------------------------------------------------------------
+
#include
StringCommand sCmd;
-//---------------------------------------------------------------
+
#include
#define NUM_BUTTONS 6
boolean but[NUM_BUTTONS];
Bounce * buttons = new Bounce[NUM_BUTTONS];
-//----------------------------------------------------------------
+
#include "GyverFilters.h" //настраивается в GyverHacks.h - MEDIAN_FILTER_SIZE
GMedian medianFilter;
-//----------------------------------------------------------------
+
#include
#include
OneWire *oneWire;
DallasTemperature sensors;
-//----------------------------------------------------------------
+
#include
DHTesp dht;
-//----------------------------------------------------------------
-//#include
-//#include "SoftwareSerial.h"
-//SoftwareSerial SoftSerial(12, 13, false, 128);
-//ModbusMaster modbus;
-
-//swSer.begin(9600);
-//modbus.begin(1, SoftSerial);
-//-----------------------------------------------------------------
+//===============FIRMWARE VARS========================
boolean just_load = true;
-
const char* hostName = "IoT Manager";
-
-String configSetup = "{}"; //setup
-String configJson = "{}"; //live
+//JSON
+String configSetup = "{}";
+String configJson = "{}";
String optionJson = "{}";
-
-String json = "{}";
-
+//MQTT
String chipID = "";
String prex;
-String ids;
String all_widgets = "";
String scenario;
-
String order_loop;
-
+//SENSORS
boolean flagLoggingAnalog = false;
boolean flagLoggingLevel = false;
boolean flagLoggingDallas = false;
boolean flagLoggingdhtT = false;
boolean flagLoggingdhtH = false;
-
+//NTP
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
-
String current_time;
-
+//SCENARIO
int scenario_line_status [] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
-
+//ERRORS
int wifi_lost_error = 0;
int mqtt_lost_error = 0;
-
-String var;
-
-//flags for not async actions
+String last_version;
+//ASYNC ACTIONS
boolean upgrade_url = false;
boolean upgrade = false;
boolean mqtt_connection = false;
boolean udp_data_parse = false;
boolean mqtt_send_settings_to_udp = false;
-
+//UDP
boolean udp_busy = false;
-
-
-String test;
-
boolean chart_data_in_solid_array;
-
-
unsigned int udp_port = 4210;
-char udp_incomingPacket[255];
-//char udp_replyPacket[] = "Multicast packet 1";
+#ifdef ESP8266
IPAddress udp_multicastIP (255, 255, 255, 255);
+#endif
+#ifdef ESP32
+IPAddress udp_multicastIP (239, 255, 255, 255);
+#endif
String received_ip;
String received_udp_line;
diff --git a/udp.ino b/udp.ino
index e3597bfb..2294c995 100644
--- a/udp.ino
+++ b/udp.ino
@@ -10,6 +10,7 @@ void UDP_init() {
}
if (value == "2") {
SPIFFS.remove("/dev.csv");
+ addFile("dev.csv", "device id;device name;ip address");
request->redirect("/?dev");
}
if (value == "3") {
@@ -26,8 +27,13 @@ void UDP_init() {
});
SPIFFS.remove("/dev.csv");
+ addFile("dev.csv", "device id;device name;ip address");
+#ifdef ESP8266
Udp.begin(udp_port);
+#endif
+
+ handleUdp_esp32();
ts.add(UDP, 30000, [&](void*) {
if (WiFi.status() == WL_CONNECTED) {
@@ -36,32 +42,24 @@ void UDP_init() {
#ifdef ESP8266
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
Udp.write(line_to_send.c_str());
+ Udp.endPacket();
#endif
#ifdef ESP32
- Udp.beginMulticast(udp_multicastIP, udp_port);
+ udp.broadcast(line_to_send.c_str());
#endif
- Udp.endPacket();
Serial.println("[UDP<=] dev info send");
}
}
}, nullptr, false);
}
-void add_dev_in_list(String fileName, String id, String dev_name, String ip) {
- File configFile = SPIFFS.open("/" + fileName, "r");
- if (!configFile) {
- addFile(fileName, "device id;device name;ip adress");
- }
- if (!configFile.find(id.c_str())) {
- addFile(fileName, id + ";" + dev_name + "; " + ip + "");
- }
-}
-
void handleUdp() {
+#ifdef ESP8266
if (WiFi.status() == WL_CONNECTED) {
int packetSize = Udp.parsePacket();
if (packetSize) {
- //Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
+ char udp_incomingPacket[255];
+ Serial.printf("[UDP=>] Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
received_ip = Udp.remoteIP().toString();
int len = Udp.read(udp_incomingPacket, 255);
if (len > 0) {
@@ -71,6 +69,19 @@ void handleUdp() {
udp_data_parse = true;
}
}
+#endif
+}
+
+void handleUdp_esp32() {
+#ifdef ESP32
+ if (udp.listenMulticast(udp_multicastIP, udp_port)) {
+ udp.onPacket([](AsyncUDPPacket packet) {
+ received_udp_line = (char*)packet.data();
+ received_ip = packet.remoteIP().toString();
+ udp_data_parse = true;
+ });
+ }
+#endif
}
void do_udp_data_parse() {
@@ -94,6 +105,13 @@ void do_udp_data_parse() {
}
}
+void add_dev_in_list(String fileName, String id, String dev_name, String ip) {
+ File configFile = SPIFFS.open("/" + fileName, "r");
+ if (!configFile.find(id.c_str())) {
+ addFile(fileName, id + ";" + dev_name + "; " + ip + "");
+ }
+}
+
void send_mqtt_to_udp() {
if (WiFi.status() == WL_CONNECTED) {
udp_busy = true;
@@ -107,15 +125,11 @@ void send_mqtt_to_udp() {
#ifdef ESP8266
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
Udp.write(mqtt_data.c_str());
+ Udp.endPacket();
#endif
#ifdef ESP32
- Udp.beginMulticast(udp_multicastIP, udp_port);
- int size_of = sizeof(mqtt_data);
- uint8_t msg[10] = (uint8_t)atoi(mqtt_data.c_str());
- //Udp.write(msg, sizeof(mqtt_data));
- //Udp.write(mqtt_data.c_str(), strlen(mqtt_data.c_str()));
+ udp.broadcast(mqtt_data.c_str());
#endif
- Udp.endPacket();
Serial.println("[UDP<=] mqtt info send");
udp_busy = false;
}