欢迎光临散文网 会员登陆 & 注册

个人适用的单片机长距离通讯方法(PC-20230910-Wingman)

2023-09-11 00:59 作者:季风蒲灵  | 我要投稿

方法由四大部份构成: 上位单片机

Air780E

frp

Godot服务器

Air780E可以事先刷入AT固件,只作为联网和通讯之用。其默认开启联网功能,常用的联网指令如下: AT+CIPSTART=TCP,domain.name,port

AT+CIPSEND

> XX XX XX XX XX XX XX XX XX 1A

上述3条指令由单片机通过串口向Air780E发送,分别意为: 建立TCP连接

准备传送一段数据

在串口返回 “>” 符号后,以 十六进制 开始像串口输入数据,最后以十六进制 1A 结尾表示数据传输完毕

frp用于获取在公网上的域名并将本地服务器端口映射到该公网域名上 Godot可以用于搭建一个简易的服务器和图形界面,其启用TCP服务的脚本可参照如下:

extends Node

const HOST := "127.0.0.1"

const PORT := 114

var server := TCPServer.new()

var clientSet:Dictionary

func _ready():

if server.listen(PORT, HOST) == OK:

print("地面站网络服务启动")

else:

print_debug("地面站网络服务",HOST,PORT,"启动失败")

func _process(delta):

for client in clientSet.keys():

client.poll()

# 处理数据

var dataLength:int = client.get_available_bytes()

if dataLength:

match client.get_data(dataLength):

[var err, var data]:

if err == OK and dataLength:

handle_data(client, data)

# 清理无效连接

if client.get_status() == StreamPeerTCP.STATUS_NONE:

clientSet.erase(client)

print("TCP连接数:", clientSet.size())

continue

# 处理新增连接

if server.is_connection_available():

var client := server.take_connection()

clientSet[client] = client

print("TCP连接数:", clientSet.size())

func handle_data(client:StreamPeerTCP, data:PackedByteArray):

print("<",data)

func put_data(client:StreamPeerTCP, data:PackedByteArray):

client.put_data(data)

print(">",data)

效果如下图所示:

个人适用的单片机长距离通讯方法(PC-20230910-Wingman)的评论 (共 条)

分享到微博请遵守国家法律