0

HarmonyOS技术社区 · 2021年01月13日

#2020征文-开发板# 用OLED板实现FlappyBird小游戏(下)

Huawei 学习分享 嵌入式系统 IoT

#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。

#2020征文-开发板# 用OLED板实现FlappyBird小游戏(下)

 

        这是开发板启动server的流程图:

#2020征文-开发板# 用OLED板实现FlappyBird小游戏(下)       

 

在启动socket server后,就是接受客户端的连接请求,然后循环接收数据,根据指令执行动作。还有一点需要注意,那就是网络相关的操作函数放到单独的一个thread中执行,即后台连接网络,避免阻塞程序主线程。这里socket server侦听端口设置为8888。

        很快我就发现,不知道开发板的IP地址啊。虽然我可以在路由器管理页面上查看到所有设备IP,但总是不方便,总不能去哪都得找路由器管理员吧。于是我又加入了一键显示IP地址的功能。具体就是调用netifapi\_netif\_get\_addr函数(netifapi.h),函数的声明如下:

/*
 * Func Name:  netifapi_netif_get_addr
 */
/**
 * @ingroup Threadsafe_Network_Interfaces
 *
 * @brief
 *
 *  This is a thread safe API, used to get IP_add configuration for a network interface
 *  (including netmask and default gateway).
 *  It is recommended to use this API instead of netif_get_addr()
 *
 * @param[in]    netif          Indicates the network interface to get.
 * @param[in]    ipaddr         Indicates the IP address.
 * @param[in]    netmask        Indicates the network mask.
 * @param[in]    gw             Indicates the default gateway IP address.
 *
 * @returns
 *  0 : On success \n
 *  Negative value : On failure \n
 *
 * @par Related Topics
 * netif_get_addr()
 *
 * @note
 *   - netmask and/or gw can be passed NULL, if these details about the netif are not needed
 */
err_t netifapi_netif_get_addr(struct netif *netif,
                              ip4_addr_t *ipaddr,
                              ip4_addr_t *netmask,
                              ip4_addr_t *gw);

        第一个参数netif,即之前连接wifi用到的netif结构体指针,其他三个分别是用来返回的ip地址、子网掩码、网关。

        那么如何把返回的ip4\_addr\_t结构体转换为通用的数字加句点的字符串格式(例如192.168.1.1)呢?答案就是ip4addr\_ntoa函数。

char *ip = ip4addr_ntoa(ipAddr);
printf("ip: %s\n", ip);
free(ip)//用完记得释放

        其实在\vendor\hisi\hi3861\hi3861\third\_party\lwip\_sack\include\lwip\ip4\_addr.h头文件中定义好了一系列的转换函数,他们的定义如下,我们可以按需使用:

u32_t ipaddr_addr(const char *cp);
int ip4addr_aton(const char *cp, ip4_addr_t *addr);
/** returns ptr to static buffer; not reentrant! */
char *ip4addr_ntoa(const ip4_addr_t *addr);
char *ip4addr_ntoa_r(const ip4_addr_t *addr, char *buf, int buflen);

int inet_pton4(const char *src, unsigned char *dst);
const char *lwip_inet_ntop4(const unsigned char *src, char *dst, u32_t size);

        手机控制器方面,我在DevEcoStudio中基于鸿蒙OS做了一版App,主要实现Tcp方式连接到指定IP,并发送指令。但由于手上没有真机,故无法调试,只能另外做了一个Android版本App代替调试,有些遗憾,希望也能借此机会拿到P40,完成这个梦想,也一睹鸿蒙OS的芳容。

        这是在DevEcoStudio中的工程截图:

#2020征文-开发板# 用OLED板实现FlappyBird小游戏(下)

 

模拟器运行起来长这样:

#2020征文-开发板# 用OLED板实现FlappyBird小游戏(下)

 

        就是模拟器没法联网,比较无奈。不过这不妨碍做一个Android版本用来测试,核心代码如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //添加按钮事件回调
        this.findViewById(R.id.btn_go).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        EditText editIp = findViewById(R.id.edit_ip);//界面添加了一个IP地址输入框
                        String ip = editIp.getText().toString();
                        sendCmd(ip);//向指定IP发送指令
                    }
                }).start();
            }
        });
    }

    private Socket socket;

    private void sendCmd(String ipAddr){
        int port = 8888;//开发板socket server监听端口号8888
        try {
            if(socket == null){
                socket = new Socket(ipAddr, port);//创建socket客户端
                Log.i("JoyStick", "Create socket!!");
            }
            String cmdData = "A";//发送一个A
            byte data[] = cmdData.getBytes();
            socket.getOutputStream().write(data);
            Log.i("JoyStick", "Send success!!");
            showMessage("Send success!", Toast.LENGTH_SHORT);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            Log.e("JoyStick", e.toString());
            showMessage("Send Error!\n" + e.toString(), Toast.LENGTH_SHORT);
        }
    }
}

        APP在我的mate20上运行界面如下:

查看更多内容>>>

 

作者:老船夫

想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/

0 阅读 849
收藏 0
推荐阅读
极术干货|范子莹-如何加速安全Rich IoT方案的部署(PPT下载+视频回放) IOT操作系统分析与比较 教材推荐|苏州大学王宜怀教授:《窄带物联网NB-IoT应用开发共性技术》 专题推荐 | Arm安全技术学习不可错过的技术干货 国内物联网操作系统及生态简介 MCU系统中Iot RAM的潜在应用
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息
  • 用户指南 · 用户协议 · 隐私政策
  • 关于我们 · 联系合作
  • 粤ICP备18004469号
  • 粤公网安备 44030502008014号
  • 版权所有 © 2024 极术社区
  • 由 SegmentFault 提供技术支持

  • 友情链接
    • 安谋科技
    • 安创空间
    • 开源中国
    • InfoQ
    • 边缘计算社区
    • 21IC 电子网
    • HarmonyOS 技术社区
    • 电子芯吧客
    • CSDN
    • 全志在线
    • 芒果派
    • 深度强化学习实验室
    • LiveVideoStack
    • 智东西

玻璃钢生产厂家嘉兴玻璃钢陶瓷雕塑厂家重庆个性化玻璃钢雕塑多少钱江苏主题商场美陈研发公司云南玻璃钢造型景观雕塑制作嘉峪关仿真玻璃钢雕塑安装河源优惠的玻璃钢雕塑衡阳市玻璃钢雕塑家居商场美陈氛围南宁商场花艺美陈亳州人物玻璃钢雕塑多少钱深圳超市商场美陈供应商玻璃钢雕塑价格多少钱德惠玻璃钢关公雕塑潮汕玻璃钢龙雕塑玻璃钢猎豹雕塑个性化玻璃钢抽象雕塑连云港玻璃钢卡通门头雕塑设计莱阳玻璃钢花盆花器玻璃钢休闲椅雕塑厂家鹤壁标识标牌玻璃钢仿铜雕塑临沂玻璃钢雕塑模型景观玻璃钢雕塑厂家工厂常州新年美陈商场天津抽象玻璃钢雕塑哪家便宜无锡玻璃钢仿铜雕塑多少钱齐齐哈尔卡通玻璃钢雕塑安装广州动物玻璃钢雕塑有哪些商场美陈气球造型吉祥物玻璃钢雕塑河南仿古玻璃钢仿铜雕塑报价香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化