描述
<div>
<p style="line-height:1.8;">注:* 为必填项</p>
<p style="line-height:1.8;"><strong><span style="color:#0093e6;">请在报名阶段填写 ↓</span></strong></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">* 1、项目功能介绍</h3>
<hr>
<p style="line-height:1.8;">道闸控制技术是智能交通和出入口管理的重要组成部分,广泛应用于停车场、高速公路收费站、小区出入口等场景。其发展经历了机械式、电动式、自动化控制,到如今的智能化、联网化阶段,不断提高通行效率与安全性。</p>
<p style="line-height:1.8;">可以通过完成此项目主要可以学习到UDP的发送和接收</p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*2、项目属性</h3>
<hr>
<p style="line-height:1.8;">首次公开。是原创。未曾在其他比赛中获奖。未在学校参加过答辩。</p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">* 3、开源协议</h3>
<hr>
<p style="line-height:1.8;">Public Domain</p>
<p> </p>
<p style="line-height:1.8;"><strong><span style="color:#0093e6;">请在竞赛阶段填写 ↓</span></strong></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*4、硬件部分</h3>
<hr>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><img src="//image.lceda.cn/pullimage/OrV1ULuIk7xvapBEQPgIPY2sAzhlRiSF2GmWFXdO.png" width="298" height="220" alt="OrV1ULuIk7xvapBEQPgIPY2sAzhlRiSF2GmWFXdO.png"></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*5、软件部分</h3>
<hr>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;">WiFi:</p>
<p style="line-height:1.8;">WiFi连接逻辑 1.配置热点参数:SSID=“ssid”,密码 =“password”,加密方式 = PSK; 2.调用 ConnectToHotspot() 接口连接 WiFi; 3.连接成功后获取设备 IP(g_device_ip),失败则 OLED 显示 “Connect to AP failed”。 关键代码关联 // 热点配置宏定义 #define PARAM_HOTSPOT_SSID “ssid" #define PARAM_HOTSPOT_PSK "password" // 连接核心函数 int netId = ConnectToHotspot(&config); 作用: 为了打通传输层,便于后续UDP信息的传输</p>
<p style="line-height:1.8;">UDP指令接收 + 数据解析:</p>
<p style="line-height:1.8;">通信参数 本地接收端口:9999(UDP_RECV_PORT); 支持指令格式: 基础指令:on(舵机开)、off(舵机关)、down(定时 10 秒); 数据指令:go 汉字索引 车牌号 状态(如go 6 dhdk444 0,对应 “蒙 + dhdk444 + 通行”)。 数据解析流程 接收 UDP 数据后,用 strtok() 按空格拆分字段(最大 5 个字段); 校验字段合法性(如汉字索引 0-33,状态 0-2); 按字段类型执行逻辑(指令→舵机,数据→OLED 显示)。 关键代码片段: // 字段拆分核心 fields[field_count] = strtok(recv_buf, " "); while (fields[field_count] != NULL && field_count</p>
<p style="line-height:1.8;">整体概述</p>
<p style="line-height:1.8;">开发板上电会自动连接网络,连接成功测试UDP通讯,成功则在OLED上显示send:connecting 如右图所示: 首行显示 UDP客户端测试 第二行 显示UDP是否建立连接 第三行 显示舵机状态 第四行 显示车牌号和是否通行 如若数据格式不对,则会舍弃此次数据, 保持原有设置,防止因错误数据影响 造成误判</p>
<div>
<div>// 主线程函数</div>
<div>static void NetDemoTask(void *arg)</div>
<div>{</div>
<div> (void)arg;</div>
<div> </div>
<div> int control_temp = 0;</div>
<div> // 定义热点配置</div>
<div> WifiDeviceConfig config = {0};</div>
<br>
<div> // 设置热点配置中的SSID</div>
<div> strcpy(config.ssid, PARAM_HOTSPOT_SSID);</div>
<br>
<div> // 设置热点配置中的密码</div>
<div> strcpy(config.preSharedKey, PARAM_HOTSPOT_PSK);</div>
<br>
<div> // 设置热点配置中的加密方式(Wi-Fi security types)</div>
<div> config.securityType = PARAM_HOTSPOT_TYPE;</div>
<br>
<div> // 等待100ms</div>
<div> osDelay(10);</div>
<br>
<div> // 连接到热点</div>
<div> int netId = ConnectToHotspot(&config);</div>
<br>
<div> // 检查是否成功连接到热点</div>
<div> if (netId
<div> {</div>
<div> // 连接到热点失败</div>
<div> printf("ConnectToAP failed\n");</div>
<div> OledFillScreen(0x00); // 输出错误信息</div>
<div> OledShowString(0, 0, "Connect to AP failed", FONT8x16);</div>
<div> return;</div>
<div> }</div>
<div> </div>
<div> // 连接到热点成功,显示连接成功信息</div>
<div> printf("AP:connected\n");</div>
<div> OledFillScreen(0x00);</div>
<div> OledShowString(0, 0, "AP:connected", FONT8x16);</div>
<div> </div>
<div> // 运行UDP客户端测试</div>
<div> UdpClientTest(PARAM_SERVER_ADDR, PARAM_SERVER_PORT);</div>
<br>
<div> // 断开热点连接</div>
<div> printf("disconnect to AP ...\r\n");</div>
<div> DisconnectWithHotspot(netId);</div>
<div> printf("disconnect to AP done!\r\n");</div>
<div>}</div>
<br>
<div>// 入口函数</div>
<div>static void NetDemoEntry(void)</div>
<div>{</div>
<div> switch_init();</div>
<div> interrupt_monitor();</div>
<div> // 初始化OLED</div>
<div> OledInit();</div>
<br>
<div> // 全屏填充黑色</div>
<div> OledFillScreen(0x00);</div>
<br>
<div> // OLED显示APP标题</div>
<div> OledShowString(0, 0, "UdpClient Test", FONT8x16);</div>
<br><br>
<div> // 定义线程属性</div>
<div> osThreadAttr_t attr;</div>
<div> attr.name = "NetDemoTask";</div>
<div> attr.attr_bits = 0U;</div>
<div> attr.cb_mem = NULL;</div>
<div> attr.cb_size = 0U;</div>
<div> attr.stack_mem = NULL;</div>
<div> attr.stack_size = 10240;</div>
<div> attr.priority = osPriorityNormal;</div>
<div> // 创建线程</div>
<div> if (osThreadNew(NetDemoTask, NULL, &attr) == NULL)</div>
<div> {</div>
<div> printf("[NetDemoEntry] Falied to create NetDemoTask!\n");</div>
<div> }</div>
<div>}</div>
</div>
<div>
<div>extern int control_flag ;</div>
<h3>*6、BOM清单</h3>
<p><img src="//image.lceda.cn/pullimage/JNPPgXgyUG8Ew34W3aQkKtVPVAWAwPYieufr85Ga.png" alt="JNPPgXgyUG8Ew34W3aQkKtVPVAWAwPYieufr85Ga.png"></p>
<br>
<h3>*7、大赛LOGO验证</h3>
<p><img src="//image.lceda.cn/pullimage/ZR4wQAEFizploG55j0rC5vD1f44OosuTZHAfltCU.jpeg" width="153" height="204" alt="ZR4wQAEFizploG55j0rC5vD1f44OosuTZHAfltCU.jpeg"></p>
<br>
<div> </div>
</div>
</div>
</div>
评论(0)