首页 > 其他分享 >树莓派和esp8266之间使用tcp协议通信

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

时间:2023-06-09 23:57:10浏览次数:48  
标签:树莓 esp8266 tcp client ADC data adc

 

树莓派代码:

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);
}

 

标签:树莓,esp8266,tcp,client,ADC,data,adc
From: https://www.cnblogs.com/LiuXinyu12378/p/17470533.html

相关文章

  • Python标准库socketserver使用线程混入实现异步TCP服务器
    功能描述:使用Python标准库socketserver中提供的ThreadingTCPServer实现异步TCP服务端程序,隐藏线程创建与管理细节,自动为每个客户端连接创建线程并处理数据。服务端代码: 客户端代码:......
  • 简单网络编程--TCP SERVER 端
     一个服务器,接受客户连接,返回客户IP地址,并关闭连接。一个服务器程序的基本步骤:1.winsocklibrary的初始化2.创建socket3.服务器地址4.bind->listen5.等待客户连接accept6.处理客户接入7.关闭socket8.释放资源:winsocklibrary//SimpleTcpServe......
  • TCP通信:实现BS架构
          ......
  • 树莓派之OLED12864视频播放—BadApple
    概述本篇教程讲述了使用树莓派驱动OLED12864液晶屏,并在液晶屏上播放动画和视频.硬件平台树莓派一台—RaspberryPi_2B。OLED12864显示屏一块,SPI接口。软件平台wiringPi—开源树莓派GPIO库。EasyBMP—开源BMP图片处理库(这个库是用C++编写的,主要为了方便提取BMP图片数据,我已经做好了......
  • TCP通信:群聊案例
      packageKarl.Demo.Test;importjava.io.DataOutputStream;importjava.io.OutputStream;importjava.net.Socket;importjava.util.Scanner;publicclassClient{publicstaticvoidmain(String[]args)throwsException{//1.创建Sockrt对象,并......
  • 一文读懂大厂面试的计算机网络面试题目(超详细整理)(TCP/IP,OSI,HTTP协议)
    对于大厂的面试来说,掌握基本的计算机网络知识十分必要,但是说实话就单单是博主觉得,看书去复习,是最好的“安眠药”,哈哈哈,所以具有针对性的去学习更加的有效果,所以直接看大厂的高频面试题,快速建立知识结构体系。以下的一些是博主通过博览众多平台的博客推文进行的汇总:1.计算机网络OS......
  • TCP粘包问题如何解决?
        在TCP的socket编程中,发送端和接收端都有成对的socket。发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。那么这样一来,接收端就必须使用高效科学的拆包机......
  • 如何设置Windows操作系统TIME_WAIT状态的TCP连接快速回收时间?
    大规模Windows环境下,采用Nginx反向代理服务后,操作系统会产生较多TIME_WAIT的TCP(TransmissionControlProtocol)连接,操作系统默认TIME_WAIT的TCP连接回收时间是4分钟,TCP默认动态端口范围为开始端口49152,结束端口65535。这样会使回收TCP过慢导致系统吞吐量下降,甚至出现502访问失败问......
  • 查看tcp和udp端口是否开启
    telnet只能看tcproot@performance:~#telnet192.168.80.1049108Trying192.168.80.104...Connectedto192.168.80.104.Escapecharacteris'^]'.nc既可以看tcp也可以看udptcproot@performance:~#nc-vz192.168.80.1049108192.168.80.104:inversehostlookup......
  • 通信三要素:协议-TCP
          ......