esp8266 esp32使用http post往flask发送json数据以及解析json

平台

esp32 +vscode + platformio

引脚:

/** PIN **
 * OLED:VCC  --- ESP32:3.3V
 * OLED:GND  --- ESP32:GND
 * OLED:SCL  --- ESP32:D22
 * OLED:SDA  --- ESP32:D21
 * * 
 * */

需要安装的库

#include "HTTPClient.h"
#include <ArduinoJson.h>

难点

网上很多都是使用http get, 很少用http post的,但是往服务器传数据一般都是post

直接上代码

#include <Arduino.h>
#include "HTTPClient.h"
#include <ArduinoJson.h>

/** PIN **
 * OLED:VCC  --- ESP32:3.3V
 * OLED:GND  --- ESP32:GND
 * OLED:SCL  --- ESP32:D22
 * OLED:SDA  --- ESP32:D21
 * * 
 * */

const char *ssid = "LinuxRT";                      //wifi名
const char *password = "88888888";              //wifi密码
const char *host = "http://192.168.31.221:5000"; 
const char *query_addr = "/upload_data";

WiFiClient wifi_Client;
HTTPClient http_client;
String req;
String rsp;
 

//Wifi连接
void setupWifi()
{
  delay(10);
  Serial.println("connecting WIFI");
  WiFi.begin(ssid, password);
  while (!WiFi.isConnected())
  {
    Serial.print(".");
    delay(500);
  }
  Serial.println("Wifi connected ok!");
}
 
void setUpHttpClient()
{
  req = (String)host + query_addr;
  Serial.println(req);
  if (http_client.begin(req))
  {
    Serial.println("HTTPclient setUp done!");
  }
}
 
void setup()
{
  Serial.begin(115200);
  delay(3000);
  setupWifi();
  setUpHttpClient();
}
 
void loop()
{
  uint8_t buffx[]="hello world";
  
  // 转换为json
  StaticJsonDocument<200> doc;
  doc["current"] = 1;
  String ouput;
  // 序列化
  serializeJsonPretty(doc, ouput);

  // 添加http头
  http_client.addHeader("Content-Type","application/json");
  // 发送请求
  int http_code = http_client.POST((uint8_t*)ouput.c_str(),ouput.length());
  if(http_code == 200)
  {
      rsp = http_client.getString();


      DynamicJsonDocument doc(1024);
      // json序列化
      deserializeJson(doc, rsp);
      JsonObject obj = doc.as<JsonObject>();
      // 获得key
      String state = obj["state"];
      Serial.println(state);
  }
  delay(1000);
}

flask服务器核心代码

@app.route('/upload_data',methods=['POST', 'GET'])
def hello_world1_post():
    data = request.get_json()
    print(data['current'])

    return jsonify({"state": "ok"})

下载地址:https://github.com/KiritoGoLeon/esp_project/tree/master/esp32_current_mearuse

 

### 基于树莓派和ESP8266开发无人配送车下单软件 #### 1. 系统架构设计 在构建无人配送车的下单系统时,通常会采用客户端-服务器模型。其中,树莓派作为主要处理单元负责运行Web服务端程序以及与ESP8266通信;而ESP8266则用于提供Wi-Fi连接功能,在Station模式下连接到互联网或者创建自己的热点供移动设备接入[^1]。 #### 2. 树莓派上的Flask Web应用实现订单提交接口 为了简化前端交互逻辑并快速搭建原型,可以利用Python中的轻量级框架Flask来部署RESTful API。下面是一个简单的例子展示如何接收来自用户的HTTP POST请求并将数据保存至文件或数据库: ```python from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/order', methods=['POST']) def create_order(): order_data = request.json # 这里应该加入验证逻辑以确保接收到的数据合法有效 with open('orders.txt', 'a') as f: f.write(str(order_data)) return jsonify({"status": "success"}), 201 if __name__ == '__main__': app.run(host='0.0.0.0') ``` 此段代码实现了基本的功能:监听`/order`路径下的POST方法调用,并把传入JSON格式的内容追加写入本地文本文件中。实际项目可能还需要考虑安全性措施如身份认证机制等。 #### 3. 使用ESP8266发送订单信息给树莓派 当用户通过手机或其他方式向无人配送车上安装好的ESP8266模块发起命令后,该模块将以Client的身份尝试建立TCP/IP链接并与指定IP地址对应的树莓派进行通讯。这里给出一段Arduino IDE兼容的语言片段用来演示这一过程: ```cpp #include <ESP8266WiFi.h> const char* ssid = "your_wifi_ssid"; const char* password = "your_wifi_password"; // 替换成自己树莓派的实际局域网ip IPAddress server(192, 168, 1, 10); void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } } void loop() { if(WiFi.status()==WL_CONNECTED){ WiFiClient client; if(client.connect(server, 80)){ String postData="{'item':'book','quantity':2}"; client.println("POST /order HTTP/1.1"); client.println("Host: 192.168.1.10"); // 同样替换为真实主机名或IP client.println("Content-Type: application/json"); client.printf("Content-Length: %d\r\n",postData.length()); client.println(); client.println(postData); int statusCode=client.parseInt(); // 获取响应状态码 Serial.println(statusCode==201?"Order Created":"Failed to Create Order"); break; // 成功发送一次即可退出循环测试效果 }else{ Serial.println("connection failed"); } } } ``` 上述C++风格脚本展示了怎样配置ESP8266进入Station模式并通过HTTP协议向远程服务器(即树莓派)上传送包含商品详情在内的JSON字符串。注意要根据实际情况调整网络参数设置部分。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值