【BearPi-HM Nano,玩转鸿蒙“碰一碰”】Part4:OLED与UDP的结合!
<p><strong>1.介绍</strong></p><p>上一篇我们写了OLED的驱动,也说好了这一篇写UDP与电脑通信,然后显示从电脑下发过来的信息,其实比较容易的,因为有LiteOS,采用消息队列让两个线程之间进行通信,将UDP收到的数据发送给OLED的线程,然后显示出来就可以了。</p>
<p><strong>2.设计</strong></p>
<p>首先开启UDP的例程【D3_iot_udp_client】,在这个例程上添加一个发送消息的机制就可以了,消息在OLED中创建,这里只需要引入即可,然后在接收到数据的时候发送就可以了。</p>
<pre>
<code>typedef struct
{
//object data type
char *Buf;
uint8_t Idx;
} MSGQUEUE_OBJ_t;
MSGQUEUE_OBJ_t msg;
//message queue id
extern osMessageQueueId_t mid_MsgQueue;
//总计发送 count 次数据
while (1)
{
bzero(recvBuf, sizeof(recvBuf));
//发送数据到服务远端
sendto(sock_fd, send_data, strlen(send_data), 0, (struct sockaddr *)&send_addr, addr_length);
//线程休眠一段时间
sleep(10);
//接收服务端返回的字符串
recvfrom(sock_fd, recvBuf, sizeof(recvBuf), 0, (struct sockaddr *)&send_addr, &addr_length);
printf("%s:%d=>%s\n", inet_ntoa(send_addr.sin_addr), ntohs(send_addr.sin_port), recvBuf);
//给消息队列赋值
memset(message_buf, 0, sizeof(message_buf));
memcpy(message_buf, recvBuf, strlen(recvBuf));
msg.Buf = message_buf;
msg.Idx = 0U;
osMessageQueuePut(mid_MsgQueue, &msg, 0U, 0U);
}</code></pre>
<p>这里重新创建了一个数组,测试的时候直接用【recvBuf】是传出一个空数组,所以额外添加了一个数组【message_buf】,这里算是一个坑。</p>
<p>然后再开始编写OLED部分,由于OLED部分接口基本都有了,只要直接调用一下就可以了。</p>
<pre>
<code>typedef struct
{
//object data type
char *Buf;
uint8_t Idx;
} MSGQUEUE_OBJ_t;
MSGQUEUE_OBJ_t msg1;
osMessageQueueId_t mid_MsgQueue;
//创建消息
mid_MsgQueue = osMessageQueueNew(MSGQUEUE_OBJECTS, 100, NULL);
if (mid_MsgQueue == NULL)
{
printf("Falied to create Message Queue!\n");
}
//task cycle
while(1)
{
//wait message queue
//printf("wait...\n");
usleep(1000000);
status = osMessageQueueGet(mid_MsgQueue, &msg1, NULL, 0U);
if (status == osOK)
{
printf("rec:%s\n", msg1.Buf);
OLED_ShowString(0, 4, (uint8_t *)msg1.Buf, 16);
}
}</code></pre>
<p>这里只把主要代码帖出来,最后会把源码分享出来,大家有兴趣的去下载就好了。这里呢,就是一直接收消息队列,等待就可以了,为什么需要【sleep(1000000)】主要是我遇到一个BUG,没有这个sleep的话,UDP似乎是不工作的。把他加上就正常了,具体原因没有去找,有兴趣的童鞋可以去找一下,我这边就不去找原因了。</p>
<p>最后下载到板子上,然后打开【TCP/UDP Socket 调试助手】,选择【UDP Server】设置端口号为【8888】。</p>
<p class="imagemiddle" style="text-align: center;"></p>
<p style="text-align: center;">图1</p>
<p>按下开发板的复位键,串口打印如下内容。</p>
<p class="imagemiddle" style="text-align: center;"></p>
<p style="text-align: center;">图2</p>
<p>等到调试助手收到下面这条指令,说明UDP连接成功,并发送了一条消息。</p>
<p class="imagemiddle" style="text-align: center;"></p>
<p style="text-align: center;">图3</p>
<p>最后测试一下,发送【123456】和【wangerxiao】显示接收正常。</p>
<p class="imagemiddle" style="text-align: center;"></p>
<p style="text-align: center;">图4</p>
<p>OLED显示最后一次接收到的内容。</p>
<p class="imagemiddle" style="text-align: center;"></p>
<p style="text-align: center;">图5</p>
<p><strong>3.总结</strong></p>
<p>那么这次的Demo就到这了,后续要是还有时间测评小熊派的话会继续给大家分享好玩的东西,公司可能也要引入【HarmonyOS】系统做项目,到时候也会分享一些HarmonyOS的经验的!</p>
<p>源码分享:</p>
<p>最后晒一下粘人的小妖精,陪伴写测评的我~</p>
<p class="imagemiddle" style="text-align: center;"></p>
<p> </p>
<p> </p>
<p>看来,小熊派还是挺好玩的</p>
<p>已经下载了楼主的源码了</p>
<p> </p>
Jacktang 发表于 2021-6-13 11:47
看来,小熊派还是挺好玩的
已经下载了楼主的源码了
<p>主要产家封装的好,添加功能方便</p>
<p>很详细,能撸猫的都是有女朋友的。</p>
页:
[1]