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

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

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

[[374609]]

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

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

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

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

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

這玩意,說簡單也不簡單,說復雜吧也不復雜。

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

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

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

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

1.PC和Hi3861開發板之間使用無線連接到同一個局域網中。

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

3.Hi3861作為客戶端接受到PC端發送的相應指令來進行相應的控制三色燈板的操作。

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

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

1.PC和Hi3861開發板之間使用無線連接到同一個局域網中

1.1 首先定義了wifi需要的兩個監聽事件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 定義了一個打印wifi信息的輔助函數 

  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作為服務端建立TCP連接。

2.1 先配置TCP協議

  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協議 
  6. serverAddr.sin_port = htons(port);  // 端口號,從主機字節序轉為網絡字節序 
  7. if (inet_pton(AF_INET, PARAM_SERVER_ADDR, &serverAddr.sin_addr) <= 0) {  // 將主機IP地址從“點分十進制”字符串 轉化為 標準格式(32位整數) 
  8. printf("inet_pton failed!\r\n"); 
  9. goto do_cleanup; 

 2.2 調用connect函數進行連接,這里確保連接之后,才可以

  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 調用recv接口接收從PC服務端發來的消息

  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端發送的相應指令來進行相應的控制三色燈板的操作。

3.1 先進行Hi3861控制三色開發板的基礎設置

  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 根據TCP協議接收到的信息,判斷后選擇GpioSetOutputVal進行三色燈開關控制

  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:分享一個調試中困擾了我好長時間的一個問題,就是在調試過程中Hi3861的無線很不穩定,連接上一會兒就會掉,然后又連接,我一度以為是代碼的問題,苦苦探求,之后才發現問題的根源是我公司的同時使用的wifi太多了,把無線信道都占了,導致我使用的只支持2.4G的小破路由器根本不穩定,給大家分享這個坑,遇到的話直接跳過去,別重蹈我的覆轍了......

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

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

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

 

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

2022-08-05 19:37:59

鴻蒙Api框架

2023-01-08 13:46:49

2022-04-02 20:11:50

智慧交通燈鴻蒙操作系統

2021-08-06 11:46:46

Go三色標記法

2021-08-16 10:35:52

JVM標記法屏障

2020-12-31 12:22:15

鴻蒙Hi3861應用開發

2021-06-25 15:32:13

鴻蒙HarmonyOS應用

2025-01-06 08:22:41

2022-08-15 08:01:00

三色標記JVM算法

2021-09-09 10:06:09

鴻蒙HarmonyOS應用

2022-01-07 09:56:16

鴻蒙HarmonyOS應用

2020-12-15 11:57:49

Hi3861 HarmonyOS開發板

2020-07-09 15:45:22

GoGC內存

2011-04-08 11:13:50

CISCO IOS令牌桶雙桶

2023-06-19 07:12:51

JVM三色標記

2021-12-14 14:45:38

鴻蒙HarmonyOS應用

2012-06-12 11:28:51

精益掃描儀

2021-09-16 10:03:39

鴻蒙HarmonyOS應用

2020-10-30 09:41:44

鴻蒙Hi3861WiFi小車
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 特黄视频 | 一区二区三区电影在线观看 | 欧美日韩国产高清 | 国产国产精品久久久久 | 一区视频在线免费观看 | 久久免费视频2 | 99精品国自产在线 | 国产精品久久久久久久久久三级 | 国产成人久久精品一区二区三区 | 日韩精品亚洲专区在线观看 | 成人1区2区 | 欧美三级电影在线播放 | 久久人 | 男人的天堂视频网站 | 一区日韩 | 99国产精品99久久久久久粉嫩 | 天天草天天 | 在线观看亚洲 | 国产精品国产成人国产三级 | 亚洲精品1 | 一区二区高清不卡 | 国产精品一区在线观看 | 精品丝袜在线 | 国产在线一区二区三区 | 一区二区三区视频 | 久久综合久久综合久久 | av电影手机在线看 | 日韩www视频 | 久草欧美 | 久草a√ | 久久久久资源 | 三极网站 | 国产一级淫片免费视频 | 91婷婷韩国欧美一区二区 | 欧美激情国产日韩精品一区18 | 日韩精品免费一区二区在线观看 | 欧美精品福利视频 | 超碰91在线 | 亚洲国产一区二区三区在线观看 | 精品国产1区2区3区 一区二区手机在线 | 国产黄色大片在线观看 |