【开发板试用报告】鸿蒙Hi3861环境搭建,基于tcp client远程控制LED

系统
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz

[[361124]]

 想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

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

非常惭愧由于前段时间太忙到最近才开始鼓捣Hi3861,首先感谢下乔帮主、连老师等大牛的优质输出,真乃大神种树后人乘凉啊。

简要记录一下搭建过程的注意事项和tcp client demo。

编译环境的搭建,在WIN10上,利用WSL,配合docker简直不要太爽。具体安装方式官方有详细步骤,这里不再赘述,docker环境可以参考docker无忧包安装,非常便捷。

编译环境和代码环境准备好后,用 python build.py wifiiot 就可执行代码编译。docker环境下非首次编译基本就几十秒就编完。



烧录环境需要注意的几个事项

一、hpm无法加载文件问题:

1. 以管理员身份运行vscode;

2. 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的;

3. 执行:set-ExecutionPolicy RemoteSigned;

4. 这时再执行get-ExecutionPolicy,就显示RemoteSigned;

二、MODULE_NOT_FOUND问题:


更改bundle.json中的%UPLOAD_SCRIPT%

 

三、固件不存在问题:


修改配置中烧录文件路径和烧录方式


等到下面打印出现说明烧录完成


可以使用串口工具看下Hi3861的启动是否正常


在看到wifi init success打印后在串口使用AT指令测试连通性



到此,所有环境搭建验证完成。可以愉快的撸代码了。

接下来简单的用python在PC端搭建了一个tcp server,在Hi3861上搭建了tcp client,PC上通过socket发送指令给Hi3861,控制LED灯的亮灭。下面是简单的代码摘要。

  1. int tcp_client_demo(void) 
  2.  
  3.  
  4. /* 服务器的地址信息 */ 
  5.  
  6. struct sockaddr_in server_addr; 
  7.  
  8. ssize_t ret; 
  9.  
  10. printf("%s %d \r\n", __FILE__, __LINE__); 
  11.  
  12. sleep(10); 
  13.  
  14. /* 1 、创建socket */ 
  15.  
  16. if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) 
  17.  
  18.  
  19. printf("%s %d \r\n", __FILE__, __LINE__); 
  20.  
  21. perror("socket is error\r\n"); 
  22.  
  23. exit(1); 
  24.  
  25.  
  26. /* 配置server端的IP和端口 */ 
  27.  
  28. server_addr.sin_family = AF_INET; 
  29.  
  30. server_addr.sin_port = htons(50007); 
  31.  
  32. server_addr.sin_addr.s_addr = inet_addr("192.168.1.101"); 
  33.  
  34. printf("%s %d \r\n", __FILE__, __LINE__); 
  35.  
  36. /* 连接 tcp server*/ 
  37.  
  38. if(connect(sock_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) 
  39.  
  40.  
  41. printf("%s %d \r\n", __FILE__, __LINE__); 
  42.  
  43. perror("connect is error\r\n"); 
  44.  
  45. exit(1); 
  46.  
  47.  
  48. printf("%s %d \r\n", __FILE__, __LINE__); 
  49.  
  50. /* 接收循环 */ 
  51.  
  52. while(1) 
  53.  
  54.  
  55. if((ret = recv(sock_fd, recvbuf, sizeof(recvbuf), 0)) == -1){ 
  56.  
  57. printf("recv error \r\n"); 
  58.  
  59. return -1; 
  60.  
  61.  
  62. printf("recv :\r\n"); 
  63.  
  64. printf("%s", recvbuf); 
  65.  
  66. printf("\r\n"); 
  67.  
  68. if(recvbuf[0] == '1'
  69.  
  70.  
  71. /* Turn the LED ON. */ 
  72.  
  73. g_ledState = LED_ON; 
  74.  
  75. printf("LED turned ON\n"); 
  76.  
  77. sprintf(sendbuf, "LED turned ON"); 
  78.  
  79.  
  80. else if(recvbuf[0] == '0'
  81.  
  82.  
  83. /* Turn the LED OFF. */ 
  84.  
  85. g_ledState = LED_OFF; 
  86.  
  87. printf("LED turned OFF\n"); 
  88.  
  89. sprintf(sendbuf, "LED turned OFF"); 
  90.  
  91.  
  92. else 
  93.  
  94.  
  95. printf("Invalid command\n"); 
  96.  
  97. sprintf(sendbuf, "Invalid command"); 
  98.  
  99.  
  100. if((ret = send(sock_fd, sendbuf, strlen(sendbuf) + 1, 0)) == -1) 
  101.  
  102.  
  103. perror("send : "); 
  104.  
  105.  
  106. sleep(2); 
  107.  
  108.  
  109. close(sock_fd); 
  110.  
  111. return 0; 
  112.  

 下面是python server的相关代码摘要。

  1. def echo_server(host, port): 
  2.  
  3. print("=========================="
  4.  
  5. print("TCP Server"
  6.  
  7. print("=========================="
  8.  
  9. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  10.  
  11. s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) 
  12.  
  13. try: 
  14.  
  15. s.bind((host, port)) 
  16.  
  17. s.listen(1) 
  18.  
  19. except socket.error as msg: 
  20.  
  21. print("ERROR: ", msg) 
  22.  
  23. s.close() 
  24.  
  25. s = None 
  26.  
  27. if s is None: 
  28.  
  29. sys.exit(1) 
  30.  
  31. while 1: 
  32.  
  33. print("Listening on: %s:%d"%(host, port)) 
  34.  
  35. data_len = 0 
  36.  
  37. try: 
  38.  
  39. conn, addr = s.accept() 
  40.  
  41. except KeyboardInterrupt: 
  42.  
  43. print("Closing Connection"
  44.  
  45. s.close() 
  46.  
  47. s = None 
  48.  
  49. sys.exit(1) 
  50.  
  51. print('Incoming connection accepted: ', addr) 
  52.  
  53. try: 
  54.  
  55. while 1: 
  56.  
  57. data = input("Enter your option: '1' to turn ON LED, '0' to trun OFF LED and Press the 'Enter' key: "
  58.  
  59. conn.send(data.encode()) 
  60.  
  61. data = conn.recv(4096) 
  62.  
  63. if not data: break 
  64.  
  65. print("Acknowledgement from TCP Client:", data.decode('utf-8')) 
  66.  
  67. print(""
  68.  
  69. except KeyboardInterrupt: 
  70.  
  71. print("Closing Connection"
  72.  
  73. s.close() 
  74.  
  75. s = None 
  76.  
  77. sys.exit(1) 
  78.  
  79. conn.close() 

 最终实现的效果如下:


相关代码已经打包上传,希望接下来能继续用鸿蒙做出一些有趣的事情!

©著作权归作者和HarmonyOS技术社区共同所有,如需转载,请注明出处,否则将追究法律责任。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

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

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2020-12-09 09:44:29

Hi3861硬件介绍鸿蒙开发板

2020-10-29 09:53:06

Hi3861硬件开发板

2020-10-30 17:42:36

鸿蒙 OS Hi386

2020-11-17 12:15:36

MQTT开发

2020-11-23 09:32:43

WIFI连接

2021-09-16 10:03:39

鸿蒙HarmonyOS应用

2021-12-20 21:01:52

鸿蒙HarmonyOS应用

2020-11-03 09:53:04

体验官方固件程序

2023-05-09 15:17:42

Hi3861鸿蒙

2020-10-21 10:01:47

HiSpark Wi-智能家居套件

2020-10-20 09:32:43

HiSparkWi-FiIoT

2020-10-26 10:21:39

Wi-Fi IoT智能家居套件

2020-11-27 11:52:40

OneNet

2020-11-26 12:02:07

OneNet平台

2020-11-25 11:55:47

FlappyBird

2020-10-23 09:50:15

HiSpark Wi-开发套件

2020-11-06 10:15:16

HiBurn

2021-12-15 15:28:18

鸿蒙HarmonyOS应用

2020-12-15 11:57:49

Hi3861 HarmonyOS开发板

2020-11-11 10:06:15

鸿蒙
点赞
收藏

51CTO技术栈公众号