ESP8266开发笔记

ESP8266开发笔记

  • ESP8266开发笔记
    • 目前实现的功能
    • 功能预览
    • 代码
      • Arduino代码
      • 服务器代码

ESP8266开发笔记

今天是开始上手刚买的ESP8266模块的第一天,刚有点进展,现记录如下。

目前实现的功能

今天刚上手开发,查了不少资料,目前已经实现的功能如下:

  1. 实现网络连接 ,可以连接目前家庭网络;
  2. 实现对服务器数据的请求 ,可以请求服务器数据;
  3. 实现JSON数据处理 功能,可以将服务器返回的JSON数据进行处理;

功能预览

  1. Arduino端口调试输出界面:
    ESP8266开发笔记_第1张图片
  2. Postman测试界面
    ESP8266开发笔记_第2张图片

代码

Arduino代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 

// 定义工作波特率
#define BaudRate   115200

// 设置 WiFi名和密码
// Enter your Wi-Fi SSID
const char *WIFINAME = "chen-2.4G";
// Enter you Wi-Fi Password
const char *WIFIPW = "w88888888";
// 主机地址
const char *HOST = "192.168.1.199";
const unsigned int PORT = 8080;


void setup() {

    Serial.begin(BaudRate);                            //Serial connection
    Serial.println("ESP8266 Ready!");
    // Connecting to a WiFi network
    Serial.print("Connect to ");
    Serial.println(WIFINAME);
    WiFi.begin(WIFINAME, WIFIPW);   //WiFi connection

    while (WiFi.status() != WL_CONNECTED) {  //Wait for the WiFI connection completion

        delay(500);
        Serial.println("Waiting for connection");

    }
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    Serial.println("");

}

void loop() {
    // 每隔多久取一次資料
    retrieveField();  // filed_id=1 是 DHT11 的溫度值
    delay(20000); // ms
}

void retrieveField() {
    // 設定 ESP8266 作為 Client 端
    WiFiClient client;
    // 设置超时时间
    client.setTimeout(10000);
    if (!client.connect(HOST, PORT)) {
        Serial.println("connection failed");
        return;
    } else {
        // 连接成功
        Serial.println(F("Connected!"));
        // Send HTTP request
        client.println(F("GET /testJson HTTP/1.0"));
        client.println(F("Host: 192.168.1.199"));
        client.println(F("Connection: close"));
        if (client.println() == 0) {
            Serial.println(F("Failed to send request"));
            return;
        }
        // Check HTTP status
        char status[32] = {0};
        client.readBytesUntil('\r', status, sizeof(status));
        Serial.println(status);
        if (strcmp(status, "HTTP/1.1 200 ") != 0) {
            Serial.print(F("Unexpected response: "));
            Serial.println(status);
            return;
        }
        // Skip HTTP headers
        char endOfHeaders[] = "\r\n\r\n";
        if (!client.find(endOfHeaders)) {
            Serial.println(F("Invalid response"));
            return;
        }
        // Allocate the JSON document
        // Use arduinojson.org/v6/assistant to compute the capacity.
        const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_ARRAY_SIZE(2) + 60;
        DynamicJsonDocument doc(capacity);

        // Parse JSON object
        DeserializationError error = deserializeJson(doc, client);
        if (error) {
            Serial.print(F("deserializeJson() failed: "));
            Serial.println(error.c_str());
            return;
        }

        JsonObject root = doc.as();
        // using C++11 syntax (preferred):
        for (JsonPair kv : root) {
            Serial.print(kv.key().c_str());
            Serial.print("   --->  ");
            const char *str = kv.value().as();
            if (str != NULL) {
                if (strlen(str) != 0) {
                    // 这是一个字符串
                    Serial.println(str);
                }

            } else {
                // 是数值
                Serial.println(kv.value().as());
            }
        }

        // Extract values
//        Serial.println(F("Response:"));
//        Serial.println(doc["username"].as());
//        Serial.println(doc["address"].as());
//        Serial.println(doc["age"].as());

        // Disconnect
        client.stop();
    }
}

服务器代码

服务器端代用Java构建的一个简单WEB项目,仅仅用于返回数据测试,可根据自己擅长替换!

package cn.fanchencloud.springbootwebtest.controller;

import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by handsome programmer.
 * User: chen
 * Date: 2020/3/22
 * Time: 22:28
 * Description:
 *
 * @author chen
 */
@RestController
public class TestController {

    @RequestMapping(value = "/testJson", method = RequestMethod.GET)
    public Map<String, Object> testJson() {
        Map<String, Object> map = new HashMap<>(3);
        map.put("username", "fanchencloud");
        map.put("age", 24);
        map.put("address", "test address , 测试地址");
        return map;
    }

    /**
     * 功能描述:通过HttpServletRequest 的方式来获取到json的数据
* * @param request 请求数据 * @return 请求结果 */
@RequestMapping(value = "/test/data", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public String getByRequest(HttpServletRequest request) { //获取到JSONObject JSONObject jsonParam = this.getJsonParam(request); // 将获取的json数据封装一层,然后在给返回 JSONObject result = new JSONObject(); result.put("msg", "ok"); result.put("method", "request"); result.put("data", jsonParam); return result.toJSONString(); } /** * 功能描述:通过request来获取到json数据 * * @param request 请求数据 * @return Json 对象 */ public JSONObject getJsonParam(HttpServletRequest request) { JSONObject jsonParam = null; try { // 获取输入流 BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8")); // 写入数据到 StringBuilder StringBuilder sb = new StringBuilder(); String line = null; while ((line = streamReader.readLine()) != null) { sb.append(line); } jsonParam = JSONObject.parseObject(sb.toString()); // 直接将json信息打印出来 System.out.println(jsonParam.toJSONString()); } catch (Exception e) { e.printStackTrace(); } return jsonParam; } }

你可能感兴趣的:(工具类,网络编程,笔记,java,arduino)