【BearPi-HM Nano,玩转鸿蒙“碰一碰”】Part4:OLED与UDP的结合!
[复制链接]
1.介绍
上一篇我们写了OLED的驱动,也说好了这一篇写UDP与电脑通信,然后显示从电脑下发过来的信息,其实比较容易的,因为有LiteOS,采用消息队列让两个线程之间进行通信,将UDP收到的数据发送给OLED的线程,然后显示出来就可以了。
2.设计
首先开启UDP的例程【D3_iot_udp_client】,在这个例程上添加一个发送消息的机制就可以了,消息在OLED中创建,这里只需要引入即可,然后在接收到数据的时候发送就可以了。
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);
}
这里重新创建了一个数组,测试的时候直接用【recvBuf】是传出一个空数组,所以额外添加了一个数组【message_buf】,这里算是一个坑。
然后再开始编写OLED部分,由于OLED部分接口基本都有了,只要直接调用一下就可以了。
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);
}
}
这里只把主要代码帖出来,最后会把源码分享出来,大家有兴趣的去下载就好了。这里呢,就是一直接收消息队列,等待就可以了,为什么需要【sleep(1000000)】主要是我遇到一个BUG,没有这个sleep的话,UDP似乎是不工作的。把他加上就正常了,具体原因没有去找,有兴趣的童鞋可以去找一下,我这边就不去找原因了。
最后下载到板子上,然后打开【TCP/UDP Socket 调试助手】,选择【UDP Server】设置端口号为【8888】。
图1
按下开发板的复位键,串口打印如下内容。
图2
等到调试助手收到下面这条指令,说明UDP连接成功,并发送了一条消息。
图3
最后测试一下,发送【123456】和【wangerxiao】显示接收正常。
图4
OLED显示最后一次接收到的内容。
图5
3.总结
那么这次的Demo就到这了,后续要是还有时间测评小熊派的话会继续给大家分享好玩的东西,公司可能也要引入【HarmonyOS】系统做项目,到时候也会分享一些HarmonyOS的经验的!
源码分享:
udp_oled.zip
(16.75 KB, 下载次数: 12)
最后晒一下粘人的小妖精,陪伴写测评的我~
|