#2020征文-开发板# 用OLED板实现FlappyBird小游戏(下) 原创 精华
(图片侵删)
年底这段时间相信大家都和我一样挺忙的,最近稍得空闲,赶紧来更新咱的FlappyBird。上次说到要加一个联机对战的功能,想想这个小鸟也不适合改成对战类,不过没关系,这也不妨碍咱们来研究一下开发板联网的方法。所以本文主要介绍我是如何让开发板具备连接wifi并开启socket server,然后开发基于HarmonyOS的手机遥控器,或者也可以说成是虚拟手柄的雏形吧。说起来,这可是鸿蒙OS手机和鸿蒙Hi3861开发板之间的故事哦。
咱们这个Harmony Hi3861 Wifi IoT开发板本来就是为Wifi智能家居量身定做,所以Wifi的支持一定少不了,在阅读了各种官方文档、代码,又拜读了连志安老师的几篇文章(链接),总算是有了眉目。
一般来说,wifi相关的接口都在“\vendor\hisi\hi3861\hi3861\third_party\lwip_sack\include\lwip\netifapi.h”头文件中,仔细阅读代码中的注释会很有帮助。这次没有把手机配网功能放进来,因为觉得每次运行还得手机一顿操作好麻烦,用的是直接STA模式连接指定AP的方式,以后可以改进成碰一碰组网的方式,留待后续研究。
话不多说,上图:
这是总体架构图,路由器做AP,手机和开发板分别连接到同一个Wifi。
这是开发板启动server的流程图:
在启动socket server后,就是接受客户端的连接请求,然后循环接收数据,根据指令执行动作。还有一点需要注意,那就是网络相关的操作函数放到单独的一个thread中执行,即后台连接网络,避免阻塞程序主线程。这里socket server侦听端口设置为8888。
很快我就发现,不知道开发板的IP地址啊。虽然我可以在路由器管理页面上查看到所有设备IP,但总是不方便,总不能去哪都得找路由器管理员吧。于是我又加入了一键显示IP地址的功能。具体就是调用netifapi_netif_get_addr函数(netifapi.h),函数的声明如下:
第一个参数netif,即之前连接wifi用到的netif结构体指针,其他三个分别是用来返回的ip地址、子网掩码、网关。
那么如何把返回的ip4_addr_t结构体转换为通用的数字加句点的字符串格式(例如192.168.1.1)呢?答案就是ip4addr_ntoa函数。
其实在\vendor\hisi\hi3861\hi3861\third_party\lwip_sack\include\lwip\ip4_addr.h头文件中定义好了一系列的转换函数,他们的定义如下,我们可以按需使用:
手机控制器方面,我在DevEcoStudio中基于鸿蒙OS做了一版App,主要实现Tcp方式连接到指定IP,并发送指令。但由于手上没有真机,故无法调试,只能另外做了一个Android版本App代替调试,有些遗憾,希望也能借此机会拿到P40,完成这个梦想,也一睹鸿蒙OS的芳容。
这是在DevEcoStudio中的工程截图:
模拟器运行起来长这样:
就是模拟器没法联网,比较无奈。不过这不妨碍做一个Android版本用来测试,核心代码如下:
APP在我的mate20上运行界面如下:
这里只是发送了一种指令“A",因为FlappyBird只用到了一个控制按钮,如果考虑通用性的话,可以制定一套协议,实现手柄所有按键的指令发送。
例如:左L,右R,上U,下D,按键A/B/P/Q等,留待以后完善。
好了,编译、烧板、运行。实际操作起来,手感还是不错的,上图:
这是按S2显示IP演示:
这是手机控制演示:
这是演示视频:
https://harmonyos.51cto.com/show/2767
代码奉上:
https://gitee.com/pleiades/harmonyos_flappy_bird
感谢大家的支持~
后续打算将一些套件没有的外设纳入进来,比如GPS模块,摄像头,蓝牙之类的,应该能碰撞出更多的创意火花,大家觉得如何呢?
久违的好文,感谢抽空分享。
这个文章终于有下集了。赞。
记得加附件哦。
好文 必须收藏一波!!!
终于等到下集
仔细一看是我关注的人,赞
代码已经上传到gitee,见文末链接。
这个这可以
好文!!!!支持