ESP32使用micropython做串口-TCP互传。ardpoilt,走mavlink协议失败

ESP32的具体功能是:

1:设置串口号,波特率等。

2:开启wifi,让地面站的电脑链接该WIFI

3:监听一个端口,我这里直接开启5566端口。

4:当串口收到数据之后,将数据原封不动发送给5566端口中的客户

5:当端口接收到数据之后,将数据原样发送出串口。

首先,测试了普通数据能能否正常转发。

我查看了数据有没有丢包。结果是没有丢数据

 

但是在使用上位机链接的时候,就无法连接成功。(当然我拥有其他的8266。或者4G数传是可以通过这种方式链接的)

作为普通数传肯定是没问题的,可能是MS地面站对数据包的分包方式有要求。 

好了直接上代码吧

 

 

import machine
import time
import network
import socket
import _thread
from machine import Pin

ulen = 0
wlen = 0

pin2 = machine.Pin(2,machine.Pin.OUT)

# 选择串口号和波特率
uart = machine.UART(2, 38400)


# 设置热点名称和密码
SSID = "ESP32AP"
PASSWORD = "password"

# 连接WiFi网络
wifi = network.WLAN(network.AP_IF)
wifi.active(True)
wifi.config(essid=SSID)

# 打印IP地址
print("WiFi热点已启动,IP地址为:", wifi.ifconfig()[0])


# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
ESP_IP = wifi.ifconfig()[0]
ESP_PORT = 5566
sock.bind((ESP_IP, ESP_PORT))
# 开始监听
sock.listen(1)
print("正在监听连接...")


# 全局变量用于存储当前连接的客户端
client_conn = None
client_addr = None

# 客户端处理函数
def handle_client(conn, addr):
    global client_conn, client_addr
    global ulen
    global wlen
    client_conn = conn
    client_addr = addr
    print("已连接:", client_addr)

    # 循环接收数据
    while True:
        try:
            data = conn.recv(4096)
            if not data:
                break
            print("收到数据:", data.decode())
            # 写入数据
            uart.write(bytes(data))
        except:
            print("退出:", client_addr)
            break

    # 关闭连接
    conn.close()

# 等待新连接函数
def wait_for_client():
    global client_conn, client_addr
    while True:
        # 等待连接
        conn, addr = sock.accept()
        print("已连接:", addr)

        # 关闭上一个客户端连接
        if client_conn is not None:
            print("关闭上一个连接:", client_addr)
            client_conn.close()
            client_conn = None
            client_addr = None

        # 创建新线程处理客户端请求
        _thread.start_new_thread(handle_client, (conn, addr))
        


def uart_irq():
    global client_conn, client_addr
    global ulen
    global wlen
    while True:
        # 从串口读取数据
        data = uart.read()
        if data:
            # 发送数据给客户端
            print("有串口数据")
            wlen = wlen + 1
            print(wlen)
            try:
                #print("串口收到数据!")
                #print(len(data))
                #print(*data)
                ulen = ulen + len(data)
                #uart.write(bytes(data))
                print(ulen)
                print("-------------------")
                client_conn.send(bytes(data))
                #print(data)
            except:
                pass
        #time.sleep(0.01)

# 创建新线程等待新连接
_thread.start_new_thread(wait_for_client, ())
# 创建新线程等待串口数据
_thread.start_new_thread(uart_irq, ())







# 主程序代码
while True:
    #print("主程序正在运行...")
    pin2.value(1)
    time.sleep(0.1)
    pin2.value(0)
    time.sleep(3)

    

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值