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

基于TCP控制鴻蒙3861三色燈板亮滅(附Demo指導(dǎo))

開發(fā)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請(qǐng)前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com/#zz

[[374609]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

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

跟著許思維老師的腳步,在許大神的影響之下才誕生了這個(gè)demo。

首先把整個(gè)demo跑起來的演示視頻放上來,讓大家看看最終實(shí)現(xiàn)的一個(gè)效果,視頻鏈接(點(diǎn)擊可看):基于TCP來控制鴻蒙Hi3861三色燈板的燈的亮滅。

這玩意,說簡單也不簡單,說復(fù)雜吧也不復(fù)雜。

這里先說一下demo源碼如何使用:

這里我已經(jīng)把整個(gè)demo源碼作為附件上傳了,大家把文件解壓后放在源碼目錄中:applications/sample/wifi-iot/app文件夾下,然后修改該文件夾下的BUILD.gn,將其內(nèi)容修改為:

  1. import("//build/lite/config/component/lite_component.gni"
  2.  
  3. lite_component("app") { 
  4.     features = [ 
  5.         "iothardware:wifi_demo"
  6.     ] 

 這里我還是先按照老規(guī)矩說一下總體的大概思路:

1.PC和Hi3861開發(fā)板之間使用無線連接到同一個(gè)局域網(wǎng)中。

2.Hi3861作為客戶端,PC作為服務(wù)端建立TCP連接。

3.Hi3861作為客戶端接受到PC端發(fā)送的相應(yīng)指令來進(jìn)行相應(yīng)的控制三色燈板的操作。

說完了大概思路,就可以說操作需要注意的一個(gè)點(diǎn)了:在把Hi3861燒好之后進(jìn)行測試的時(shí)候,需要先開啟服務(wù)端(這里我是直接拿linux下的netcat,小伙伴完全可以換成自己熟悉的,都可以),然后在reset一下Hi3861開發(fā)板。

下面開始按照大概思路來分成三塊講解代碼

1.PC和Hi3861開發(fā)板之間使用無線連接到同一個(gè)局域網(wǎng)中

1.1 首先定義了wifi需要的兩個(gè)監(jiān)聽事件OnWifiConnectionChanged和OnWifiScanStateChanged

  1. static void OnWifiConnectionChanged(int state, WifiLinkedInfo* info) 
  2.     if (!info) return
  3.  
  4.     printf("%s %d, state = %d, info = \r\n", __FUNCTION__, __LINE__, state); 
  5.     PrintLinkedInfo(info); 
  6.  
  7.     if (state == WIFI_STATE_AVALIABLE) { 
  8.         g_connected = 1; 
  9.     } else { 
  10.         g_connected = 0; 
  11.     } 
  12. static void OnWifiScanStateChanged(int state, int size
  13.     printf("%s %d, state = %X, size = %d\r\n", __FUNCTION__, __LINE__, state, size); 

 1.2 定義了一個(gè)打印wifi信息的輔助函數(shù) 

  1. static void PrintLinkedInfo(WifiLinkedInfo* info) 
  2.     if (!info) return
  3.     static char macAddress[32] = {0}; 
  4.     unsigned char* mac = info->bssid; 
  5.     snprintf(macAddress, sizeof(macAddress), "%02X:%02X:%02X:%02X:%02X:%02X"
  6.         mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); 
  7.     printf("bssid: %s, rssi: %d, connState: %d, reason: %d, ssid: %s\r\n"
  8.         macAddress, info->rssi, info->connState, info->disconnectedReason, info->ssid); 

 1.3 開始真正的wifi連接流程

  1. (void)arg; 
  2. WifiErrorCode errCode; 
  3. WifiEvent eventListener = { 
  4.     .OnWifiConnectionChanged = OnWifiConnectionChanged, 
  5.     .OnWifiScanStateChanged = OnWifiScanStateChanged 
  6. }; 
  7. WifiDeviceConfig apConfig = {0}; 
  8. int netId = -1; 
  9. osDelay(10); 
  10. errCode = RegisterWifiEvent(&eventListener); 
  11. printf("RegisterWifiEvent: %d\r\n", errCode); 
  12. strcpy(apConfig.ssid, "helloworld"); 
  13. strcpy(apConfig.preSharedKey, "12345678"); 
  14. apConfig.securityType = WIFI_SEC_TYPE_PSK; 
  15. errCode = EnableWifi(); 
  16. printf("EnableWifi: %d\r\n", errCode); 
  17. osDelay(10); 
  18. errCode = AddDeviceConfig(&apConfig, &netId); 
  19. printf("AddDeviceConfig: %d\r\n", errCode); 
  20. g_connected = 0; 
  21. errCode = ConnectTo(netId); 
  22. printf("ConnectTo(%d): %d\r\n", netId, errCode); 
  23. while (!g_connected) { 
  24.     osDelay(10); 
  25. printf("g_connected: %d\r\n", g_connected); 
  26. osDelay(50); 
  27. struct netif* iface = netifapi_netif_find("wlan0"); 
  28. if (iface) { 
  29.     err_t ret = netifapi_dhcp_start(iface); 
  30.     printf("netifapi_dhcp_start: %d\r\n", ret); 
  31.     osDelay(200); // wait DHCP server give me IP 
  32.     ret = netifapi_netif_common(iface, dhcp_clients_info_show, NULL); 
  33.     printf("netifapi_netif_common: %d\r\n", ret); 

 2.Hi3861作為客戶端,PC作為服務(wù)端建立TCP連接。

2.1 先配置TCP協(xié)議

  1. ssize_t retval = 0; 
  2. int sockfd = socket(AF_INET, SOCK_STREAM, 0); // TCP socket 
  3. unsigned short port=5678; 
  4. struct sockaddr_in serverAddr = {0}; 
  5. serverAddr.sin_family = AF_INET;  // AF_INET表示IPv4協(xié)議 
  6. serverAddr.sin_port = htons(port);  // 端口號(hào),從主機(jī)字節(jié)序轉(zhuǎn)為網(wǎng)絡(luò)字節(jié)序 
  7. if (inet_pton(AF_INET, PARAM_SERVER_ADDR, &serverAddr.sin_addr) <= 0) {  // 將主機(jī)IP地址從“點(diǎn)分十進(jìn)制”字符串 轉(zhuǎn)化為 標(biāo)準(zhǔn)格式(32位整數(shù)) 
  8. printf("inet_pton failed!\r\n"); 
  9. goto do_cleanup; 

 2.2 調(diào)用connect函數(shù)進(jìn)行連接,這里確保連接之后,才可以

  1. if (connect(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) { 
  2.       printf("connect failed!\r\n"); 
  3.       goto do_cleanup; 
  4.   } 
  5.   printf("connect to server %s success!\r\n", PARAM_SERVER_ADDR); 

 2.3 調(diào)用recv接口接收從PC服務(wù)端發(fā)來的消息

  1. retval = recv(sockfd, &response, sizeof(response), 0); 
  2. if (retval <= 0) { 
  3.     printf("send response from server failed or done, %ld!\r\n", retval); 
  4.     goto do_cleanup; 
  5. response[retval] = '\0'
  6. printf("recv response{%s} %ld from server done!\r\n", response, retval); 

 3.Hi3861作為客戶端接受到PC端發(fā)送的相應(yīng)指令來進(jìn)行相應(yīng)的控制三色燈板的操作。

3.1 先進(jìn)行Hi3861控制三色開發(fā)板的基礎(chǔ)設(shè)置

  1. GpioInit(); 
  2.   IoSetFunc(RED_LED_PIN_NAME,RED_LED_PIN_FUNCTION); 
  3.   IoSetFunc(GREEN_LED_PIN_NAME,GREEN_LED_PIN_FUNCTION); 
  4.   IoSetFunc(RELLOW_LED_PIN_NAME,RELLOW_LED_PIN_FUNCTION); 
  5.   GpioSetDir(RED_LED_PIN_NAME,WIFI_IOT_GPIO_DIR_OUT); 
  6.   GpioSetDir(GREEN_LED_PIN_NAME,WIFI_IOT_GPIO_DIR_OUT); 
  7.   GpioSetDir(RELLOW_LED_PIN_NAME,WIFI_IOT_GPIO_DIR_OUT); 

 3.2 根據(jù)TCP協(xié)議接收到的信息,判斷后選擇GpioSetOutputVal進(jìn)行三色燈開關(guān)控制

  1. if(strncmp(RED_ON,response,5) == 0){ 
  2.       printf("red on----------------"); 
  3.       GpioSetOutputVal(RED_LED_PIN_NAME,LED_BRIGHT); 
  4.   } 
  5.   else if(strncmp(RED_OFF,response,6) == 0){ 
  6.       printf("red off--------------"); 
  7.       GpioSetOutputVal(RED_LED_PIN_NAME,LED_DARK); 
  8.   }else if(strncmp(GREEN_ON,response,7) == 0){ 
  9.       printf("red on----------------"); 
  10.       GpioSetOutputVal(GREEN_LED_PIN_NAME,LED_BRIGHT); 
  11.   } 
  12.   else if(strncmp(GREEN_OFF,response,8) == 0){ 
  13.       printf("red off--------------"); 
  14.       GpioSetOutputVal(GREEN_LED_PIN_NAME,LED_DARK); 
  15.   }else 
  16.       if(strncmp(RELLOW_ON,response,8) == 0){ 
  17.       printf("red on----------------"); 
  18.       GpioSetOutputVal(RELLOW_LED_PIN_NAME,LED_BRIGHT); 
  19.   } 
  20.   else if(strncmp(RELLOW_OFF,response,9) == 0){ 
  21.       printf("red off--------------"); 
  22.       GpioSetOutputVal(RELLOW_LED_PIN_NAME,LED_DARK); 
  23.   }else 
  24.   { 
  25.       printf("error index"); 
  26.   } 

 上述所有源碼見附件,有什么問題歡迎留言交流

ps:分享一個(gè)調(diào)試中困擾了我好長時(shí)間的一個(gè)問題,就是在調(diào)試過程中Hi3861的無線很不穩(wěn)定,連接上一會(huì)兒就會(huì)掉,然后又連接,我一度以為是代碼的問題,苦苦探求,之后才發(fā)現(xiàn)問題的根源是我公司的同時(shí)使用的wifi太多了,把無線信道都占了,導(dǎo)致我使用的只支持2.4G的小破路由器根本不穩(wěn)定,給大家分享這個(gè)坑,遇到的話直接跳過去,別重蹈我的覆轍了......

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

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

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-08-05 19:37:59

鴻蒙Api框架

2023-01-08 13:46:49

2021-08-06 11:46:46

Go三色標(biāo)記法

2022-04-02 20:11:50

智慧交通燈鴻蒙操作系統(tǒng)

2021-08-16 10:35:52

JVM標(biāo)記法屏障

2025-01-06 08:22:41

2020-12-31 12:22:15

鴻蒙Hi3861應(yīng)用開發(fā)

2022-08-15 08:01:00

三色標(biāo)記JVM算法

2021-06-25 15:32:13

鴻蒙HarmonyOS應(yīng)用

2022-01-07 09:56:16

鴻蒙HarmonyOS應(yīng)用

2020-07-09 15:45:22

GoGC內(nèi)存

2023-06-19 07:12:51

JVM三色標(biāo)記

2021-09-09 10:06:09

鴻蒙HarmonyOS應(yīng)用

2021-12-14 14:45:38

鴻蒙HarmonyOS應(yīng)用

2011-04-08 11:13:50

CISCO IOS令牌桶雙桶

2021-09-16 10:03:39

鴻蒙HarmonyOS應(yīng)用

2012-06-12 11:28:51

精益掃描儀

2020-12-15 11:57:49

Hi3861 HarmonyOS開發(fā)板

2021-09-28 10:02:26

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品视频免费看 | a级片网站| 亚洲精品久久久久久下一站 | 91免费在线 | 色婷婷综合久久久中字幕精品久久 | 伊人精品国产 | 中文字幕不卡视频在线观看 | 亚洲高清在线免费观看 | 精品福利在线 | 免费午夜视频 | 精品久久久久久久久亚洲 | 国产精品一区在线 | 日韩美av | 日本大片在线播放 | 中文字幕不卡 | 亚洲一区二区视频在线播放 | 国产一区二区影院 | 欧美国产精品 | 日韩一区在线视频 | 在线视频a | 黄网站色大毛片 | 日韩毛片在线观看 | 一区二区三区免费 | 三级免费网 | 日韩在线中文 | 91观看| 成人精品视频在线观看 | 一区视频在线播放 | 99久久久国产精品 | 中文字幕视频一区 | 久久久国产一区 | 成人免费淫片aa视频免费 | 久久久精彩视频 | 日本精品视频 | 狠狠躁躁夜夜躁波多野结依 | 欧美色专区 | 精品久久久久久久久亚洲 | 91精品国产综合久久福利软件 | 一级毛片视频在线 | 日日干日日操 | 日美女逼逼 |