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

youyoutou
发布于 2020-12-24 01:09
浏览
3收藏

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

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

 

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

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

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

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

 

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

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

1. 以管理员身份运行vscode;
2. 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的;
3. 执行:set-ExecutionPolicy RemoteSigned;
4. 这时再执行get-ExecutionPolicy,就显示RemoteSigned;

 

二、MODULE_NOT_FOUND问题:

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

更改bundle.json中的%UPLOAD_SCRIPT%

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

 

三、固件不存在问题:

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

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

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

 

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

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

 

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

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

 

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

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

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

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

 

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

int tcp_client_demo(void)
{
	/* 服务器的地址信息 */
	struct sockaddr_in server_addr;
        ssize_t ret;

    printf("%s %d \r\n", __FILE__, __LINE__);

    sleep(10);

    /* 1 、创建socket  */
	if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
        printf("%s %d \r\n", __FILE__, __LINE__);
		perror("socket is error\r\n");
		exit(1);
	}

    /* 配置server端的IP和端口 */
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(50007);
	server_addr.sin_addr.s_addr = inet_addr("192.168.1.101");

    printf("%s %d \r\n", __FILE__, __LINE__);
	/* 连接 tcp server*/
	if(connect(sock_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
	{
        printf("%s %d \r\n", __FILE__, __LINE__);
		perror("connect is error\r\n");
		exit(1);
	}

    printf("%s %d \r\n", __FILE__, __LINE__);

    /* 接收循环 */	
    while(1)
    {
        if((ret = recv(sock_fd, recvbuf, sizeof(recvbuf), 0)) == -1){
            printf("recv error \r\n");
            return -1;
        }
        printf("recv :\r\n");
        printf("%s", recvbuf);
        printf("\r\n");
        if(recvbuf[0] == '1')
        {
            /* Turn the LED ON. */
            g_ledState = LED_ON;
            printf("LED turned ON\n");
            sprintf(sendbuf, "LED turned ON");
        }
        else if(recvbuf[0] == '0')
        {
            /* Turn the LED OFF. */
            g_ledState = LED_OFF;
            printf("LED turned OFF\n");
            sprintf(sendbuf, "LED turned OFF");
        }
        else
        {
            printf("Invalid command\n");
            sprintf(sendbuf, "Invalid command");
        }

        if((ret = send(sock_fd, sendbuf, strlen(sendbuf) + 1, 0)) == -1)
        {
            perror("send : ");
        }

        sleep(2);
    }

    close(sock_fd);

    return 0;
}

 

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

def echo_server(host, port):
    print("==========================")
    print("TCP Server")
    print("==========================")
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    try:
        s.bind((host, port))
        s.listen(1)
    except socket.error as msg:
        print("ERROR: ", msg)
        s.close()
        s = None

    if s is None:
        sys.exit(1)

    while 1:
        print("Listening on: %s:%d"%(host, port))
        data_len = 0
        try:
            conn, addr = s.accept()
            
        except KeyboardInterrupt:
            print("Closing Connection")
            s.close()
            s = None
            sys.exit(1)

        print('Incoming connection accepted: ', addr)

        try:
            while 1:
                data = input("Enter your option: '1' to turn ON LED, '0' to trun OFF LED and Press the 'Enter' key: ")
                conn.send(data.encode())
                data = conn.recv(4096)
                if not data: break
                print("Acknowledgement from TCP Client:", data.decode('utf-8'))
                print("")
                
        except KeyboardInterrupt:
            print("Closing Connection")
            s.close()
            s = None
            sys.exit(1)

        conn.close()

 

最终实现的效果如下

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

【开发板试用报告】Hi3861环境搭建,基于tcp client远程控制LED-鸿蒙开发者社区【开发板试用报告】Hi3861环境搭建,基于tcp client远程控制LED-鸿蒙开发者社区相关代码已经打包上传,希望接下来能继续用鸿蒙做出一些有趣的事情!

 

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
tcp.rar 4.67K 122次下载
已于2020-12-24 01:09:52修改
4
收藏 3
回复
举报
2条回复
按时间正序
/
按时间倒序
鸿蒙开发者社区官方账号
鸿蒙开发者社区官方账号

征文大赛正在火热进行中,楼主这么优秀的文章真的不考虑参加吗?

 

例如这篇在标题开头添加“#2020征文-开发板#“,
再找到相应的专栏位置投稿,


就可以参加比赛啦!

 

详细步骤可以点击链接https://harmonyos.51cto.com/posts/1940进行了解

用更多的文章来赢取更多的奖励和人气吧!期待楼主后续的活跃表现。

回复
2020-12-24 09:35:10
definitely
definitely

果然学新东西还是得有老师带着才能走得稳,社区里的各位老师功不可没啊

回复
2020-12-24 10:48:49
回复
    相关推荐