树莓派和esp8266之间使用tcp协议通信

Posted 高颜值的殺生丸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派和esp8266之间使用tcp协议通信相关的知识,希望对你有一定的参考价值。

 

树莓派代码:

from flask import Flask, render_template
import socket
import threading

app = Flask(__name__)
adc_value = 0

# 接收tcp数据
def receive_tcp_data():

    global adc_value
    # 从ESP8266接收ADC数据
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind((\'0.0.0.0\', 5000))
    sock.listen(1)
    while True:
        conn, addr = sock.accept()
        data = conn.recv(1024)
        adc_value = 70 - int(data.decode())
        # print(conn,addr,adc_value)
        conn.close()

@app.route(\'/\')
def index():
    global adc_value
    # 在Web页面上显示ADC数据
    return render_template(\'index2.html\', adc_data=adc_value)

# Web服务线程
def start_web_server():
    app.run(host=\'0.0.0.0\', port=8888)

if __name__ == \'__main__\':
    
    # 启动接收tcp数据的线程
    udp_thread = threading.Thread(target=receive_tcp_data)
    udp_thread.daemon = True
    udp_thread.start()

        # 启动接收tcp数据的线程
    flask_thread = threading.Thread(target=start_web_server)
    flask_thread.daemon = True
    flask_thread.start()

    while True:
        pass

 

index2.html

<!DOCTYPE html>
<html>
<head>
    <title>ADC Data Display</title>
</head>
<body>
    <h1>ADC Data:  adc_data </h1>
</body>
</html>

 

esp8266 使用arduino

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

const char* ssid = "litianmenzhenbu";
const char* password = "LT12345678";
const char* serverIP = "192.168.0.110";  // 树莓派的IP地址
const int serverPort = 5000;  // 树莓派上Flask服务的端口号

void setup() 
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
    delay(1000);
    Serial.println("Connecting to WiFi...");
  

  Serial.println("Connected to WiFi");

  // 连接到树莓派上的Flask服务
  WiFiClient client;
  if (client.connect(serverIP, serverPort)) 
    Serial.println("Connected to server");
  


void loop() 
  // 模拟读取ADC值,此处可替换为实际读取ADC的代码
  int adcValue = analogRead(A0);

  // 发送ADC值到树莓派上的Flask服务
  WiFiClient client;
  if (client.connect(serverIP, serverPort)) 
    String data = String(adcValue);
    client.print(data);
    client.flush();
    client.stop();
  

  delay(100);

 

ESP32/ESP8266 WebSocket Server:控制引脚输出

ESP32/ESP8266 WebSocket Server:控制引脚输出


在本教程中,您将学习如何使用WebSocket通信协议构建一个使用ESP8266的web服务器。作为一个示例,如何构建一个web页面来远程控制ESP8266引脚输出。在web页面上显示输出状态,并在所有客户端中自动更新。

引入WebSocket

WebSocket是客户端和服务器之间的持久连接,它允许双方使用TCP连接进行双向通信。这意味着您可以在任何给定的时间将数据从客户机发送到服务器,并从服务器发送到客户机。

客户端通过一个称为WebSocket握手的过程与服务器建立WebSocket连接。握手以HTTP请求/响应开始,允许服务器在同一个端口上处理HTTP连接和WebSocket连接。一旦连接建立,客户端和服务器就可以以全双工模式发送WebSocket数据。

使用WebSockets协议,服务器(ESP8266板)可以向客户端或所有客户端发送信息,而无需请求。这也允许我们在发生更改时向web浏览器发送信息。<

以上是关于树莓派和esp8266之间使用tcp协议通信的主要内容,如果未能解决你的问题,请参考以下文章

ESP-NOW ESP8266 NodeMCU单板双向通信

基于MicroPython结合ESP8266模块实现TCP通信(AT指令版)

ESP8266 + STC15基于AT指令通过TCP通讯协议获取时间

ESP8266通过AT指令连接TCP网络

Arduino ESP8266 使用Websoket协议通讯网页控制RGB灯

ESP8266 – WiFiClient库和ESP8266HTTPClient库