<aside> 📏

改建定位:保留 UDP socket 和 HC-SR04 测距,实现无人机近距离目标/降落区域辅助感知实验。

</aside>

教案首页

教案副页

整合任务

先按原课程完成本地测距,再接入 UDP,分别验证传感器和网络。使用原有网络调试工具发送查询指令。增加 10、20、50厘米多次测试、无回波与网络断开测试;在原 while 等待回波逻辑中加入超时思路。

实施与评价

UDP回顾 → 本地测距 → 误差分析 → 远程查询 → 异常处理。测距25%,通信25%,误差25%,调试25%。


第三次课内容回顾-网络通信

# 整体流程
# 1. 连接wifi
# 2. 启动网络功能(UDP)
# 3. 接收网络数据
# 4. 处理接收的数据
import socket
from time import sleep
import network
import machine

def do_connect():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    while True:
        status=wlan.ifconfig() #查看当前的网络连接信息,未连接成功时,ip、网关、dns皆为0.0.0.0
        if status[0]=='0.0.0.0': #若本机IP地址为0.0.0.0表示未连接
            print("开始连接WiFi……")
            wlan.connect("402", "Syhzs402") # 连接到指定的WiFi
            sleep(5) #延时函数,建立连接需要时间
            print("WiFi连接状态",wlan.isconnected())  # 检查WLAN的连接状态
        else:
            print(f"连接WiFi成功,网络信息{status}") 
            break #连接成功后结束循环
        

def start_udp():
    # 2. 启动网络功能(UDP)

    # 2.1. 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 2.2. 绑定本地信息
    udp_socket.bind(("0.0.0.0", 7788))
    return udp_socket

def main():
    # 1. 链接wifi
    do_connect()
    # 2. 创建UDP
    udp_socket = start_udp()
    
    # 3. 创建灯对象
    led = machine.Pin(2, machine.Pin.OUT)
    
    # 4.创建数据接收对象
    rec_ip="192.168.50.244"
    rec_port=7070
    rec_addr=(rec_ip,rec_port)
    
    # 5. 接收网络数据
    while True:
        recv_data, sender_info = udp_socket.recvfrom(1024)
        
        try:
            recv_data_str = recv_data.decode("utf-8")
            print(recv_data_str)
        except Exception as ret:
            recv_data_str='error'
            print("error:", ret)
        
        # 6. 处理接收的数据
        if recv_data_str == "light on":
            print("这里是要灯亮的代码...")
            led.value(1)
            message = "已开灯"
        elif recv_data_str == "light off":
            print("这里是要灯灭的代码...")
            led.value(0)
            message = "已关灯"
            
        #给发送者发送消息处理结果
        udp_socket.sendto(message.encode('utf-8'),rec_addr)

if __name__ == "__main__":
    main()

超声波传感器HC-SR04测距

HC-SR04超声波测距模块