esp8266向服务器发送请求并获取数据解析(本地的java后台服务器)

it2023-04-02  78

本地运行Java代码,并开放接口给esp8266获取esp8266获取数据最核心的是访问路径的拼接两台设备必须是要连接同一个路由器才能实现局域网的通信

    1.Java代码

@RestController @RequestMapping("/cuSonManager") public class DeviceController { /** * 获取json数据 * * @return */ @GetMapping("/getJson") public String getJson(){ System.out.println("我被esp8266调用了~~"); return "{\"arduino\":\"1000\"}"; } }

2.esp8266代码

/** * 获取从服务端产生得数据 java后台 */ #include <ArduinoJson.h> #include <ESP8266WiFi.h> const char* ssid = "hopeful"; // 连接WiFi名 // 请将您需要连接的WiFi名填入引号中 const char* password = "12345678"; // 连接WiFi密码 // 请将您需要连接的WiFi密码填入引号中 const char* host = "192.168.43.129"; // 将要连接的服务器地址 const int httpPort = 8080; // 将要连接的服务器端口 void setup(){ Serial.begin(9600); Serial.println(""); // 连接WiFi connectWiFi(); } void loop(){ // 建立获取数据的路径 String reqRes = "/cuSonManager/getJson"; // 获取Java后台数据,并解析json数据 httpRequest(reqRes); delay(3000); } // 向心知天气服务器服务器请求信息并对信息进行解析 void httpRequest(String reqRes){ WiFiClient client; // 建立http请求信息 String httpRequest = String("GET ") + reqRes + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"; Serial.println(""); Serial.print("Connecting to "); Serial.print(host); // 尝试连接服务器 if (client.connect(host, httpPort)){ Serial.println(" Success!"); // 向服务器发送http请求信息 client.print(httpRequest); Serial.println("Sending request: "); Serial.println(httpRequest); // 获取并显示服务器响应状态行 String status_response = client.readStringUntil('\n'); Serial.print("status_response: ");Serial.println(status_response); // 使用find跳过HTTP响应头 if (client.find("\r\n\r\n")) { Serial.println("Found Header End. Start Parsing."); } // 利用ArduinoJson库解析心知天气响应信息 parseInfo(client); } else { Serial.println(" connection failed!"); } //断开客户端与服务器连接工作 client.stop(); } // 连接WiFi void connectWiFi(){ WiFi.begin(ssid, password); Serial.print("Connecting to "); Serial.print(ssid); Serial.println(" ..."); int i = 0; while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print(i++); Serial.print(' '); } Serial.println(""); Serial.println("Connection established!"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } // 利用ArduinoJson库解析json信息 void parseInfo(WiFiClient client){ while(client.connected() || client.available()){ if(client.available()){ String line = client.readStringUntil('\n'); Serial.println(line); } } // const size_t capacity = JSON_OBJECT_SIZE(1) + 20; // DynamicJsonDocument doc(capacity); // Serial.print(doc); // deserializeJson(doc, client); // int arduino = doc["arduino"].as<int>(); // // Serial.print("获取到了java上的json数据:"); Serial.print(arduino); }

 

最新回复(0)