W800开发套件鸿蒙系统教程

W800开发套件鸿蒙系统教程


5.2 dohome平台接入

Doit 智能云(wechat.doit.am)是由深圳四博智联科技有限公司开发的可直接用于生产环境的物联网云平台。Doit 智能云可对单个设备或是一组设备进行远程控制、接收上传数据并实时展示、实现定时任务(精确到秒)等,特有的事件统计功能可以对每台设备的开机时间和时长进行统计和分析。

针对日益增长的微信控制智能设备需求,Doit 智能云实现了:

  1. 针对每台设备生成唯一的二维码,该二维码可被微信和手机 APP 同时扫描绑定。若设备数量在 10 万以下,可直接免费使用 Doit 智能云实现微信控制,省去微信 API复杂开发流程。
  2. 针对每一类产品,生成产品标示二维码,通过微信或者手机 APP 实现该类产品的批量推送和控制。
  3. 在设备端提供最全面的配置上网方式案例,包括微信的 Airkiss、ESP‐Touch(针对ESP8266)、Easylink(针对 EMW3165)、Soft AP、网页配置等,确保只要有路由器,就能使设备配置上网成功。
  4. 控制方式多种多样,手机 app 控制、微信控制、直连 Soft AP 控制、局域网控制等。
  5. 支持 TCP、Websocket 等多种接入方式。在协议设计上,采用纯文本协议,支持推送、上传、管道等多种通讯功能,保证数据传输的便利性、实时性和安全性。

基于强大的 Doit 智能云平台,开发一个智能插座或智能小车类功能,包含手机端、微信端、设备端的程序仅需要半个工作日的时间!在开发过程中,Doit 智能云提供设备虚拟功能,可实现并行开发,加速产品的开发进程。基于 Doit 智能云,我们已经开发了智能插座、智能小车等产品,后续会有新的产品模板添加,利用这些产品模板,厂商不需要写任何代码,就能直接拿去生产相应的产品到市场销售。

首先我们建立一个任务,让板子连接上路由器:

static void NetDemoEntry(void)
{
    osThreadAttr_t attr;

    attr.name = "NetDemoTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 10240;
    attr.priority = osPriorityNormal;

    if (osThreadNew(NetDemoTask, NULL, &attr) == NULL) {
        printf("[NetDemoEntry] Falied to create NetDemoTask!\n");
    }
}

配置路由器信息并连接

#define PARAM_HOTSPOT_SSID "@snail"  // your AP SSID
#define PARAM_HOTSPOT_PSK  "ss559550"  // your AP PSK

    // 准备AP的配置参数
    strcpy(config.ssid, PARAM_HOTSPOT_SSID);
    strcpy(config.preSharedKey, PARAM_HOTSPOT_PSK);
    config.securityType = PARAM_HOTSPOT_TYPE;

    osDelay(10);

    int netId = ConnectToHotspot(&config);

    int timeout = 10;
    while (timeout--) {
        printf("After %d seconds, I will start %s test!\r\n", timeout, GetNetDemoName());
        osDelay(100);
    }

等待10秒后开始连接dohome的服务器:

void TcpClientTest(const char* host, unsigned short port)
{
    ssize_t retval = 0;
    int sockfd = socket(AF_INET, SOCK_STREAM, 0); // TCP socket

    struct sockaddr_in serverAddr = {0};
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(port);
    if (inet_pton(AF_INET, host, &serverAddr.sin_addr) <= 0) {
        printf("inet_pton failed!\r\n");
        goto do_cleanup;
    }

    if (connect(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) {
        printf("connect failed!\r\n");
        goto do_cleanup;
    }
    printf("connect to server %s success!\r\n", host);

    retval = send(sockfd, request, sizeof(request), 0);
    if (retval < 0) {
        printf("send request failed!\r\n");
        goto do_cleanup;
    }
    printf("send request{%s} %ld to server done!\r\n", request, retval);

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

do_cleanup:
    printf("do_cleanup...\r\n");
    close(sockfd);
}

程序编译下载到开发板运行:

![1](https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=563180105216588815a870855a92a266 "1")

页面列表

ITEM_HTML