成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

鴻蒙用OLED板實現FlappyBird小游戲(下)

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

年底這段時間相信大家都和我一樣挺忙的,最近稍得空閑,趕緊來更新咱的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),函數的聲明如下:

  1. /* 
  2.  
  3. * Func Name: netifapi_netif_get_addr 
  4.  
  5. */ 
  6.  
  7. /** 
  8.  
  9. * @ingroup Threadsafe_Network_Interfaces 
  10.  
  11.  
  12. * @brief 
  13.  
  14.  
  15. * This is a thread safe API, used to get IP_add configuration for a network interface 
  16.  
  17. * (including netmask and default gateway). 
  18.  
  19. * It is recommended to use this API instead of netif_get_addr() 
  20.  
  21.  
  22. * @param[in] netif Indicates the network interface to get. 
  23.  
  24. * @param[in] ipaddr Indicates the IP address. 
  25.  
  26. * @param[in] netmask Indicates the network mask. 
  27.  
  28. * @param[in] gw Indicates the default gateway IP address. 
  29.  
  30.  
  31. * @returns 
  32.  
  33. * 0 : On success \n 
  34.  
  35. * Negative value : On failure \n 
  36.  
  37.  
  38. * @par Related Topics 
  39.  
  40. * netif_get_addr() 
  41.  
  42.  
  43. * @note 
  44.  
  45. * - netmask and/or gw can be passed NULL, if these details about the netif are not needed 
  46.  
  47. */ 
  48.  
  49. err_t netifapi_netif_get_addr(struct netif *netif, 
  50.  
  51. ip4_addr_t *ipaddr, 
  52.  
  53. ip4_addr_t *netmask, 
  54.  
  55. ip4_addr_t *gw); 

 第一個參數netif,即之前連接wifi用到的netif結構體指針,其他三個分別是用來返回的ip地址、子網掩碼、網關。

那么如何把返回的ip4_addr_t結構體轉換為通用的數字加句點的字符串格式(例如192.168.1.1)呢?答案就是ip4addr_ntoa函數。

  1. char *ip = ip4addr_ntoa(ipAddr); 
  2.  
  3. printf("ip: %s\n", ip); 
  4.  
  5. free(ip)//用完記得釋放 

 其實在\vendor\hisi\hi3861\hi3861\third_party\lwip_sack\include\lwip\ip4_addr.h頭文件中定義好了一系列的轉換函數,他們的定義如下,我們可以按需使用:

  1. u32_t ipaddr_addr(const char *cp); 
  2.  
  3. int ip4addr_aton(const char *cp, ip4_addr_t *addr); 
  4.  
  5. /** returns ptr to static buffer; not reentrant! */ 
  6.  
  7. char *ip4addr_ntoa(const ip4_addr_t *addr); 
  8.  
  9. char *ip4addr_ntoa_r(const ip4_addr_t *addr, char *buf, int buflen); 
  10.  
  11. int inet_pton4(const char *src, unsigned char *dst); 
  12.  
  13. const char *lwip_inet_ntop4(const unsigned char *src, char *dst, u32_t size); 

 手機控制器方面,我在DevEcoStudio中基于鴻蒙OS做了一版App,主要實現Tcp方式連接到指定IP,并發送指令。但由于手上沒有真機,故無法調試,只能另外做了一個Android版本App代替調試,有些遺憾,希望也能借此機會拿到P40,完成這個夢想,也一睹鴻蒙OS的芳容。

這是在DevEcoStudio中的工程截圖:


模擬器運行起來長這樣:


就是模擬器沒法聯網,比較無奈。不過這不妨礙做一個Android版本用來測試,核心代碼如下:

  1. public class MainActivity extends AppCompatActivity { 
  2.  
  3. @Override 
  4.  
  5. protected void onCreate(Bundle savedInstanceState) { 
  6.  
  7. super.onCreate(savedInstanceState); 
  8.  
  9. setContentView(R.layout.activity_main); 
  10.  
  11. //添加按鈕事件回調 
  12.  
  13. this.findViewById(R.id.btn_go).setOnClickListener(new View.OnClickListener() { 
  14.  
  15. @Override 
  16.  
  17. public void onClick(View view) { 
  18.  
  19. new Thread(new Runnable() { 
  20.  
  21. @Override 
  22.  
  23. public void run() { 
  24.  
  25. EditText editIp = findViewById(R.id.edit_ip);//界面添加了一個IP地址輸入框 
  26.  
  27. String ip = editIp.getText().toString(); 
  28.  
  29. sendCmd(ip);//向指定IP發送指令 
  30.  
  31.  
  32. }).start(); 
  33.  
  34.  
  35. }); 
  36.  
  37.  
  38. private Socket socket; 
  39.  
  40. private void sendCmd(String ipAddr){ 
  41.  
  42. int port = 8888;//開發板socket server監聽端口號8888 
  43.  
  44. try { 
  45.  
  46. if(socket == null){ 
  47.  
  48. socket = new Socket(ipAddr, port);//創建socket客戶端 
  49.  
  50. Log.i("JoyStick""Create socket!!"); 
  51.  
  52.  
  53. String cmdData = "A";//發送一個A 
  54.  
  55. byte data[] = cmdData.getBytes(); 
  56.  
  57. socket.getOutputStream().write(data); 
  58.  
  59. Log.i("JoyStick""Send success!!"); 
  60.  
  61. showMessage("Send success!", Toast.LENGTH_SHORT); 
  62.  
  63.  
  64. catch (Exception e) 
  65.  
  66.  
  67. e.printStackTrace(); 
  68.  
  69. Log.e("JoyStick", e.toString()); 
  70.  
  71. showMessage("Send Error!\n" + e.toString(), Toast.LENGTH_SHORT); 
  72.  
  73.  
  74.  

 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模塊,攝像頭,藍牙之類的,應該能碰撞出更多的創意火花,大家覺得如何呢?

©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2020-12-02 11:55:40

OLED

2020-11-25 11:55:47

FlappyBird

2021-09-02 15:25:53

鴻蒙HarmonyOS應用

2020-11-30 06:20:13

javascript

2022-08-25 21:41:43

ArkUI鴻蒙

2023-08-07 15:18:29

游戲開發鴻蒙Arkts

2022-08-22 17:28:34

ArkUI鴻蒙

2022-07-29 14:47:34

數獨Sudoku鴻蒙

2023-01-03 15:16:27

2022-03-24 07:57:58

Python水果忍者游戲

2022-03-29 07:40:23

H5游戲開發掃雷游戲

2024-01-15 07:47:09

井字棋游戲編程練習Python

2024-07-31 09:46:13

2011-03-15 13:19:11

jQuery

2013-08-23 09:37:32

PythonPython游戲Python教程

2022-08-04 13:55:08

拼數字小游戲鴻蒙

2022-10-19 15:19:53

數獨Sudoku鴻蒙

2022-10-19 15:27:36

數獨Sudoku鴻蒙

2022-10-18 15:45:17

數獨Sudoku鴻蒙

2022-11-01 15:17:48

JS鴻蒙小游戲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九热在线视频免费观看 | 欧美视频三区 | 91中文字幕在线观看 | 亚洲午夜精品视频 | 欧美成人精品 | 日韩高清在线 | 久久精品国产99国产 | 精品久久久久久久久久久久久久 | 欧美在线一区二区三区 | 97成人精品 | 在线视频国产一区 | jizz在线免费观看 | 欧美成人第一页 | 国产精品91视频 | 91国在线视频 | 国产精品高潮呻吟久久av野狼 | 日韩图区 | 成人精品一区二区三区 | 7777在线视频 | 国产综合久久 | 日韩电影一区 | 四虎永久免费影院 | 日韩av成人 | www.成人.com| 中文字幕一区二区三区在线视频 | 成人亚洲片 | 嫩草视频在线看 | 久久99精品久久久久久国产越南 | 久久美女网 | 精品久久99| 久久久www成人免费无遮挡大片 | 日本精品一区二区三区四区 | 麻豆av片 | 欧美一区二区三区视频 | av一级一片 | 国产午夜精品一区二区三区嫩草 | 草草视频在线观看 | 亚洲 欧美 日韩在线 | 成人一级视频在线观看 | 国产在线一区二区三区 | 久久神马|