Upload files to "socket"

This commit is contained in:
kim
2025-10-08 06:03:13 +00:00
parent 03ec0d6d71
commit d9686e3cf6
+264
View File
@@ -0,0 +1,264 @@
#include <DHTesp.h>
#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>
#include <ArduinoJson.h>
#include <WebSocketsClient.h>
#include <SocketIOclient.h>
#include <Hash.h>
#define HostName "GreenHouse"
#define DHTPIN0 D4
#define Heater D5
#define Irrigator D6
#define Ventilator D7
#define Reset D8
DHTesp dht0;
SocketIOclient socketIO;
void control(void);
String getData(void);
void sendData(String, String);
void socketIOEvent(socketIOmessageType_t, uint8_t *, size_t );
void OTA(void);
//const char* ssid = "olleh_WiFi_0886";
//const char* password = "0000009554";
//const char* websockets_server = "192.168.10.243";
//const char* websockets_server = "192.168.10.51";
const uint16_t websockets_port = 3000;
const char* ssid = "lab";
const char* password = "ksg1019!";
const char* websockets_server = "192.168.0.187";
IPAddress ip(192,168,0,200);
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);
struct dataStruct{
float temp_GH, humidity_GH, soil_humidity_GH, temp_Env, humidity_Env, soil_humidity_Env;
int control, temp_c, vent_c, irrigate_gh, irrigate_env;
}Data;
String msg, Event;
void setup()
{
Data.temp_c = 1;
Data.vent_c = 35;
Data.irrigate_gh = 50;
Data.irrigate_env = 50;
Data.control = 8;
delay(1000);
dht0.setup(DHTPIN0, DHTesp::DHT22);
pinMode(Heater, OUTPUT);
pinMode(Irrigator, OUTPUT);
pinMode(Ventilator, OUTPUT);
pinMode(Reset, OUTPUT);
digitalWrite(Heater, HIGH);
digitalWrite(Irrigator, HIGH);
digitalWrite(Ventilator, HIGH);
digitalWrite(Reset, HIGH);
Serial.begin(115200);
delay(1000);
WiFi.config(ip, gateway, subnet);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100); Serial.print(".");
}
String ip = WiFi.localIP().toString();
Serial.printf("[SETUP] WiFi Connected %s\n", ip.c_str());
OTA();
socketIO.begin(websockets_server, websockets_port, "/socket.io/?EIO=4");
delay(1000);
socketIO.onEvent(socketIOEvent);
}
void loop()
{
ArduinoOTA.handle();
socketIO.loop();
if(Event == "data") {
Serial.println(msg);
sendData("Data1", getData());
control();
Event = "";
}
if(Event == "Ok") {
Serial.println(msg);
Event = "";
}
if(Event == "control") {
String con = msg.substring(0, msg.indexOf(','));
int num = (msg.substring(msg.indexOf(',')+1, msg.length())).toInt();
if(con == "t_con") Data.temp_c = num;
if(con == "h_con") Data.irrigate_gh = num;
if(con == "v_con") Data.vent_c = num;
if(con == "control") Data.control = num;
Event = "";
}
}
void sendData(String str1, String str2)
{
DynamicJsonDocument doc(512);
JsonArray array = doc.to<JsonArray>();
String output;
array.add(str1);
array.add(str2);
serializeJson(doc, output);
socketIO.sendEVENT(output);
array.clear();
};
void socketIOEvent(socketIOmessageType_t type, uint8_t * payload, size_t length)
{
String out;
switch(type) {
case sIOtype_DISCONNECT:
Serial.printf("[IOc] Disconnected!\n");
break;
case sIOtype_CONNECT:
//Serial.printf("[IOc] Connected to url: %s\n", payload);
// join default namespace (no auto join in Socket.IO V3)
socketIO.send(sIOtype_CONNECT, "/");
break;
case sIOtype_EVENT:
//Serial.printf("[IOc] get event: %s\n", payload);
out = (char*)payload;
msg = out.substring(out.indexOf(',')+2, out.indexOf("]")-1);
Event = out.substring(2, out.indexOf(',')-1);
break;
case sIOtype_ACK:
Serial.printf("[IOc] get ack: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_ERROR:
Serial.printf("[IOc] get error: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_BINARY_EVENT:
Serial.printf("[IOc] get binary: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_BINARY_ACK:
Serial.printf("[IOc] get binary ack: %u\n", length);
hexdump(payload, length);
break;
}
}
void control(){
if(bitRead(Data.control, 3)) {
if( Data.irrigate_gh > Data.soil_humidity_GH) {
bitSet(Data.control, 0);
digitalWrite(Irrigator, LOW);
}
else if( (Data.irrigate_gh + 10) < Data.soil_humidity_GH ) {
bitClear(Data.control, 0);
digitalWrite(Irrigator, HIGH);
}
if( (Data.temp_c -1) > Data.temp_GH ) {
bitSet(Data.control, 1);
digitalWrite(Heater, LOW);
}
else if( (Data.temp_c +1) < Data.temp_GH ){
bitClear(Data.control, 1);
digitalWrite(Heater, HIGH);
}
if ( Data.vent_c < Data.temp_c ) {
bitSet(Data.control, 2);
digitalWrite(Ventilator, LOW);
}
else if( (Data.vent_c - 5) > Data.temp_c ) {
bitClear(Data.control, 2);
digitalWrite(Ventilator, HIGH);
}
if( Data.irrigate_env > Data.soil_humidity_Env) {
bitSet(Data.control, 4);
}
else if( (Data.irrigate_env + 10) < Data.soil_humidity_Env ) {
bitClear(Data.control, 4);
}
}
else {
if (bitRead(Data.control, 0)) digitalWrite(Irrigator, LOW);
else digitalWrite(Irrigator, HIGH);
if (bitRead(Data.control, 1)) digitalWrite(Heater, LOW);
else digitalWrite(Heater, HIGH);
if (bitRead(Data.control, 2)) digitalWrite(Ventilator, LOW);
else digitalWrite(Ventilator, HIGH);
}
if(bitRead(Data.control, 5 )) {
delay(1000);
Serial.println("Resetting....");
digitalWrite(Reset, LOW);
}
}
String getData(){
String s1, s3;
Data.temp_GH = dht0.getTempAndHumidity().temperature;
Data.humidity_GH = dht0.getTempAndHumidity().humidity;
Data.soil_humidity_GH = (1024 - (float)analogRead(A0))/10;
s1 = String(Data.temp_GH)+","+String(Data.humidity_GH)+","+String(Data.soil_humidity_GH)+",";
s3 = s1+String(Data.temp_c)+","+String(Data.irrigate_gh)+","+String(Data.vent_c)+","+String(Data.control);
Serial.println(s3);
return s3;
}
void OTA(){
ArduinoOTA.setHostname(HostName);
ArduinoOTA.setPassword("7788");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_SPIFFS
type = "filesystem";
}
Serial.println("Start updating " + type);
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf(".");if (progress == 100) Serial.printf("\n");
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
} else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
});
ArduinoOTA.begin();
};