文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 14:46

关注

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

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

https://harmonyos.51cto.com/

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

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

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

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



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

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

以管理员身份运行vscode;

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

执行:set-ExecutionPolicy RemoteSigned;

这时再执行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.  
  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.  
  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.  
  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.  
  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.  
  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/

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯