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

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

    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 
#include 
 
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(); 
//
//  Serial.print("获取到了java上的json数据:"); Serial.print(arduino);
}

 

你可能感兴趣的:(物联网,物联网)