AliOS Things 3.3.0 Wi-Fi连网的那些事

 

 

1、AliOS Things Wi-Fi 联网背景

接入Wi-Fi网络,是大部分IoT设备联网的第一步。

接入Wi-Fi一般需要经历配网和连网两个阶段。

1.1、Netmgr介绍

本文介绍的Netmgr模块是将Wi-Fi驱动的配网和连网能力抽象提取出来,方便IoT设备快速入网连云。

image.png

Wi-Fi设备需要连接到Wi-Fi热点(Wi-Fi AP)之后才能与其它设备进行基于IP的通信, 我们将Wi-Fi设备获取到Wi-Fi热点的SSID/密码的步骤称为Wi-Fi配网。对于手机/电脑/平板而言, 用户可以通过键盘或者触摸屏输入Wi-Fi热点的SSID/密码。但是对于没有键盘, 没有触摸屏的IoT设备而言, 如何获取Wi-Fi热点的SSID/密码是实现设备网络管理的第一个关键步骤。

1.2、配网

简要介绍下如下的两种配网方式:

1、零配:不需要用户输入热点信息的配网方案, 它是让一个已连接到上网热点的设备将热点的SSID/密码发送给待配网的设备。

2、一键配网:手机APP把相应信息打包到802.11数据包的特定区域,发送到周围环境中;智能设备的Wi-Fi模块处于混杂模式(Promiscuous Model)下,监听网络中的所有报文,直到解析出需要的信息(之前双方约定好数据格式)。

更多配网信息,可以参考文章:

Wi-Fi物联网设备配网的N种方式

1.3、连网

无论哪种方式配网, 最终目的都是拿到SSID/PASSWORD,连上AP, 接入网络。

终端设备要成功连上Wi-Fi需要经过三个阶段:

1)扫描阶段(SCAN);

2)认证阶段 (Authentication);

3)关联(Association)。

关联成功后,终端设备发起DHCP请求或者使用静态IP地址,就表示连网成功。

image.png

 

2、重要Netmgr API

Netmgr提供了一组API支持方便用户快速接入AP。

 

2.1、netmgr_service_init

初始化netmgr模块

 

函数原型

int netmgr_service_init(utask_t *task);

参数列表

参数名称

参数描述

参数示例

task

目前只需传入NULL

NULL

返回参数

0,成功

小于0, 失败

 

2.2、netmgr_service_deinit

反初始化netmgr

函数原型

void netmgr_service_deinit(void);

参数列表

参数名称

参数描述

参数示例

无

无

无

返回参数

无

 

2.3、netmgr_add_dev

添加netmgr设备

函数原型

int netmgr_add_dev(const char* name);

参数列表

参数名称

参数描述

参数示例

name

添加完整的设备路径名

"/dev/wifi0"

 

返回参数

0,成功

小于0, 失败

 

2.4、netmgr_get_dev

根据完整的设备路径名获取设备的netmgr句柄

函数原型

netmgr_hdl_t netmgr_get_dev(const char* name);

参数列表

参数名称

参数描述

参数示例

name

添加的完整设备路径名

"/dev/wifi0"

返回参数

大于等于0,成功

小于0, 失败

 

2.5、netmgr_set_ifconfig

设置网卡相关的信息

函数原型

int netmgr_set_ifconfig(netmgr_hdl_t hdl, netmgr_ifconfig_info_t* info);

参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

info

设置的网卡配置信息

无

返回参数

0,成功

小于0, 失败

备注:

以下是netmgr_ifconfig_info_t的结构体,其中rssi不支持设置,只支持读取。

#define IPADDR_STR_LEN 16
/** @brief  this struct defines netmgr ifconfig info */
typedef struct netmgr_ifconfig_info {
   bool dhcp_en;                         /**< dhcp is enabled */
   char ip_addr[IPADDR_STR_LEN];         /**< ip address */
   char mask[IPADDR_STR_LEN];            /**< ip address mask */
   char gw[IPADDR_STR_LEN];              /**< gateway ip address */
   char dns_server[IPADDR_STR_LEN];      /**< dns server address */
   char mac[6];                          /**< mac address */
   int  rssi;                            /**< rssi */
} netmgr_ifconfig_info_t;

 

2.6、netmgr_get_ifconfig

设置网卡相关的信息

函数原型

int netmgr_get_ifconfig(netmgr_hdl_t hdl, netmgr_ifconfig_info_t* info);

参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

info

获取的网卡配置信息

无

返回参数

0,成功

小于0, 失败

 

2.7、netmgr_set_auto_reconnect

启动netmgr

函数原型

void netmgr_set_auto_reconnect(netmgr_hdl_t hdl, bool enable);

参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

enable

是否自动发起Wi-Fi连网

无

返回参数

无

 

备注

当参数autoconfig是true时,使能自动连接Wi-Fi功能。如果设备有过成功连接AP的记录,会自动去连成功链接过的AP记录里的SSID和Password。如果设备没有成功连接AP的记录,就不会自动去发起连网动作。当参数autoconfig是false时,关闭自动连接AP的功能,也不会去连AP。

 

2.8、netmgr_connect

连接网络

函数原型

int netmgr_connect(netmgr_hdl_t hdl, netmgr_connect_params_t* params);

参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

params

网络连接参数

无

 

返回参数

0,成功

其他,失败

备注:

netmgr_connect_params_t结构体目前只支持Wi-Fi,未来我们会补其其他连接方式。

/** @brief network type */
typedef enum {
    NETMGR_TYPE_WIFI,
    NETMGR_TYPE_GPRS,
    NETMGR_TYPE_NBIOT,
    NETMGR_TYPE_ETH,
    NETMGR_TYPE_MAX
} netmgr_type_t;

/** @brief  netmgr wifi connect params */
typedef struct netmgr_wifi_conenct_params {
    char        ssid[NETMGR_SSID_MAX_LEN+1];   /**< wifi ssid to connect*/
    char        pwd[NETMGR_PWD_MAX_LEN+1];     /**< wifi password to connect */
    char        bssid[NETMGR_BSSID_MAX_LEN];   /**< wifi bssid to connect */
    int         timeout;                       /**< wifi connect timeout */
} netmgr_wifi_connect_params_t;

/** @brief  netmgr connect params */
typedef struct netmgr_connect_params {
    netmgr_type_t type;
    union {
        netmgr_wifi_connect_params_t wifi_params;     /**< wifi connect params */
    } params;
} netmgr_connect_params_t;

 

2.9、netmgr_disconnect

断开网络

函数原型

int netmgr_disconnect(netmgr_hdl_t hdl);

参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

 

返回参数

0,成功

其他,失败

 

2.10、netmgr_get_state

获取当前网络的状态

函数原型

int netmgr_get_state(netmgr_hdl_t hdl);

参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

返回参数

typedef enum netmgr_conn_state{                                                                     
    CONN_STATE_DISCONNECTING,                                                                       
    CONN_STATE_DISCONNECTED,                                                                        
    CONN_STATE_CONNECTING,                                                                          
    CONN_STATE_CONNECTED,                                                                           
    CONN_STATE_OBTAINING_IP,                                                                        
    CONN_STATE_NETWORK_CONNECTED,                                                                   
    CONN_STATE_FAILED,                                                                              
    CONN_STATE_UNKNOWN                                                                              
} netmgr_conn_state_t;

 

2.11、netmgr_save_config

保存网络配置

函数原型

int netmgr_save_config(netmgr_hdl_t hdl);
参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

 

返回参数

0,成功

其他,失败

备注:

一般在连网成功后,保存配置文件。

 

2.12、netmgr_get_config

获取netmgr配置文件

 

函数原型

int netmgr_get_config(netmgr_hdl_t hdl, netmgr_config_t* config);

参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

config

netmgr配置信息

无

返回参数

0,成功

其他,失败

备注:

/** @brief  this struct defines wifi ap info */
typedef struct {
    char     ssid[NETMGR_SSID_MAX_LEN+1];       /**< ssid of wifi ap */
    uint8_t  pwd[NETMGR_PWD_MAX_LEN+1];         /**< password of wifi ap */
    uint8_t  bssid[NETMGR_BSSID_MAX_LEN];       /**< bssid of wifi ap */
    int8_t   ap_power;                          /**< signal strength of wifi ap */
    uint8_t  channel;                           /**< signal channel of wifi ap */
    uint8_t  sec_type;                          /**< details see netmgr_wifi_sec_type */
    bool     contain_chinese;                   /**< true:contain chinese false:no chinese */
    netmgr_ssid_format_e  ssid_format;          /**< ssid string format */
    char     gbk_ssid[NETMGR_SSID_MAX_LEN+1];   /**< gbk ssid string */
} netmgr_wifi_ap_info_t;

/** @brief  this struct defines wifi ap config */
typedef struct {
    int ap_num;                                          /**< ap number of array */
    int used_ap;                                         /**< ap that is used in the array */
    netmgr_wifi_ap_info_t config[MAX_AP_CONFIG_NUM];     /**< The ap information array */
} netmgr_wifi_ap_config_t, netmgr_wifi_config_t;

/** @brief  netmgr config struct */
typedef struct netmgr_config {
    netmgr_type_t type;
    union {
        netmgr_wifi_config_t wifi_config;          /**< wifi config struct */
        //netmgr_gprs_config_t gprs_config;
        //netmgr_nbiot_config_t nbiot_config;
        //netmgr_eth_config_t eth_config;
    } config;
} netmgr_config_t;

 

2.13、netmgr_del_config

删除netmgr配置文件

函数原型

int netmgr_del_config(netmgr_hdl_t hdl, netmgr_del_config_t* config);

参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

config

netmgr配置信息

无

返回参数

0,成功

其他,失败

备注:

/** @brief  netmgr delete config */
typedef struct netmgr_del_config {
    netmgr_type_t type;
    union {
        char ssid[NETMGR_SSID_MAX_LEN+1];      /**< wifi ssid to delete */
    } config;
} netmgr_del_config_t;

 

2.14、netmgr_set_msg_cb

设置消息回调函数

函数原型

int netmgr_set_msg_cb(netmgr_hdl_t hdl, netmgr_msg_cb_t cb);
参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

cb

消息回调函数

无

 

返回参数

0,成功

其他,失败

备注:

/** @brief  netmgr message type */
typedef enum {
    NETMGR_MSGID_MIN = 0,
    NETMGR_MSGID_WIFI_STATUS = NETMGR_MSGID_MIN,
    NETMGR_MSGID_WIFI_STATUS_FROM_IMPL,
    NETMGR_MSGID_WIFI_TRACE_FROM_IMPL,
    NETMGR_MSGID_NETWORK_STATUS,
    NETMGR_MSGID_ETH_STATUS_FROM_IMPL,
    NETMGR_MSGID_MAX
} netmgr_msgid_t;

/** @brief  this struct defines netmgr message */
typedef struct {
    netmgr_msgid_t id;                        /**< netmgr msg id */
    union {
        int   status;                         /**< reason of status change */
        void *network_status_change;          /**< msg content of status change */
        void *trace;
    } data;
} netmgr_msg_t;

/** @brief  this struct defines netmgr message callback function */
typedef void (*netmgr_msg_cb_t)(netmgr_msg_t* msg);
当netmgr msg id等于NETMGR_MSGID_WIFI_STATUS_FROM_IMPL, 上报的data是status,其取值定义在eventid.h, 详细如下:

#define EVENT_NETMGR_BASE                       0x01000
#define EVENT_NETMGR_WIFI_DISCONNECTED          (EVENT_NETMGR_BASE + 1)  // Connection disconected
#define EVENT_NETMGR_WIFI_SCAN_STARTED          (EVENT_NETMGR_BASE + 2)  // Scan start
#define EVENT_NETMGR_WIFI_SCAN_FAILED           (EVENT_NETMGR_BASE + 3)  // Scan failed
#define EVENT_NETMGR_WIFI_SCAN_DONE             (EVENT_NETMGR_BASE + 4)  // Scan failed
#define EVENT_NETMGR_WIFI_NETWORK_NOT_FOUND     (EVENT_NETMGR_BASE + 5)  // no AP found
#define EVENT_NETMGR_WIFI_AUTHENTICATING        (EVENT_NETMGR_BASE + 6)  // Authentication start
#define EVENT_NETMGR_WIFI_AUTH_REJECT           (EVENT_NETMGR_BASE + 7)  // Authentication rejected by AP
#define EVENT_NETMGR_WIFI_AUTH_TIMEOUT          (EVENT_NETMGR_BASE + 8)  // Authentication timeout with AP
#define EVENT_NETMGR_WIFI_ASSOCIATING           (EVENT_NETMGR_BASE + 9)  // Association starts
#define EVENT_NETMGR_WIFI_ASSOC_REJECT          (EVENT_NETMGR_BASE + 10) // Association rejected by AP
#define EVENT_NETMGR_WIFI_ASSOC_TIMEOUT         (EVENT_NETMGR_BASE + 11) // Association timeout with AP
#define EVENT_NETMGR_WIFI_ASSOCIATED            (EVENT_NETMGR_BASE + 12) // Authentication succeed
#define EVENT_NETMGR_WIFI_4WAY_HANDSHAKE        (EVENT_NETMGR_BASE + 13) // 4way-handshark start
#define EVENT_NETMGR_WIFI_HANDSHAKE_FAILED      (EVENT_NETMGR_BASE + 14) // 4way-handshake fails
#define EVENT_NETMGR_WIFI_4WAY_HANDSHAKE_DONE   (EVENT_NETMGR_BASE + 15) // 4way-handshark done
#define EVENT_NETMGR_WIFI_GROUP_HANDSHAKE       (EVENT_NETMGR_BASE + 16) // group-handshark start
#define EVENT_NETMGR_WIFI_GROUP_HANDSHAKE_DONE  (EVENT_NETMGR_BASE + 17) // group-handshark done = completed
#define EVENT_NETMGR_WIFI_CONNECTED             (EVENT_NETMGR_BASE + 18) // Connection to AP done
#define EVENT_NETMGR_WIFI_CONN_TIMEOUT          (EVENT_NETMGR_BASE + 19) // Connection timeout
#define EVENT_NETMGR_WIFI_DEAUTH                (EVENT_NETMGR_BASE + 20) // Deauth received from AP
#define EVENT_NETMGR_WIFI_MAX                   (EVENT_NETMGR_WIFI_DEAUTH)

#define EVENT_NETMGR_DHCP_BASE                  (EVENT_NETMGR_WIFI_MAX)
#define EVENT_NETMGR_DHCP_START_FAILED          (EVENT_NETMGR_DHCP_BASE + 1)  // DHCP start fails
#define EVENT_NETMGR_DHCP_TIMEOUT               (EVENT_NETMGR_DHCP_BASE + 2)  // DHCP timeout
#define EVENT_NETMGR_DHCP_SUCCESS               (EVENT_NETMGR_DHCP_BASE + 3)  // DHCP success
#define EVENT_NETMGR_DHCP_MAX                   (EVENT_NETMGR_DHCP_SUCCESS)

#define EVENT_NETMGR_SNTP_BASE                  (EVENT_NETMGR_DHCP_MAX)
#define EVENT_NETMGR_SNTP_SUCCESS               (EVENT_NETMGR_SNTP_BASE + 1)  // SNTP success
#define EVENT_NETMGR_SNTP_FAILED                (EVENT_NETMGR_SNTP_BASE + 2 ) // SNTP failure
#define EVENT_NETMGR_SNTP_MAX                   (EVENT_NETMGR_SNTP_FAILED)

#define EVENT_NETMGR_CONN_BASE                  (EVENT_NETMGR_SNTP_MAX)
#define EVENT_NETMGR_CONN_RECONNECT             (EVENT_NETMGR_CONN_BASE + 1)  // Reconnect AP
#define EVENT_NETMGR_CONN_MAX                   (EVENT_NETMGR_CONN_RECONNECT)

#define EVENT_NETMGR_GOT_IP                     (EVENT_NETMGR_DHCP_SUCCESS)

#define EVENT_NETMGR_NET_BASE                   (EVENT_NETMGR_CONN_MAX)
#define EVENT_NETMGR_NET_DISCON                 (EVENT_NETMGR_WIFI_DISCONNECTED)
#define EVENT_NETMGR_NET_CONFIG                 (EVENT_NETMGR_NET_BASE + 1)
#define EVENT_NETMGR_MAX                        (EVENT_NETMGR_NET_CONFIG)
当netmgr msg id等于NETMGR_MSGID_NETWORK_STATUS,上报的data是network_status_change,其对应的结构体如下:

#define NETMGR_WIFI_METHOD_MAX_LENGTH       (32)
#define NETMGR_WIFI_STATUS_MAX_LENGTH       (32)
#define NETMGR_WIFI_SSID_MAX_LENGTH         (32)
#define NETMGR_WIFI_PASSWORD_MAX_LENGTH     (64)

/** @brief  this struct defines netmgr wifi status change info */
typedef struct {
   char method[NETMGR_WIFI_METHOD_MAX_LENGTH+1];       /**< status change method */
   int  quantity;                                      /**< signal quantity */
   char status[NETMGR_WIFI_STATUS_MAX_LENGTH+1];       /**< current status */
   char ssid[NETMGR_WIFI_SSID_MAX_LENGTH+1];           /**< ssid of wifi */
   char password[NETMGR_WIFI_PASSWORD_MAX_LENGTH+1];   /**< password of wifi */
   uint8_t reason_code;                                /**< reason of status change */
} netmgr_wifi_network_status_change_t;

 

2.15、netmgr_del_msg_cb

删除消息回调函数

函数原型

int netmgr_del_msg_cb(netmgr_hdl_t hdl, netmgr_msg_cb_t cb);
参数列表

参数名称

参数描述

参数示例

hdl

netmgr句柄

无

cb

消息回调函数

无

返回参数

0,成功

其他,失败

 

3、API使用范例

3.1、直接连网

注意:netmgr内部需要event service的支持,所以需要在调用netmgr_service_init函数初始化netmgr的同时,调用event_service_init初始化函数。

使用event_subscribe注册监听的是特定的事件,而netmgr_set_msg_cb可以监听netmgr支持的所有事件。

#include "netmgr.h"
#include <uservice/uservice.h>
#include <uservice/eventid.h>
const char* ssid = "aos";
const char* passwd = "123456";


static void wifi_event_cb(uint32_t event_id, const void *param, void *context)
{
    printf("Got IP\r\n");
}


static void netmgr_comp_example()
{
    netmgr_connect_params_t netmgr_params;
    netmgr_hdl_t netmgr_handle;
    printf("netmgr test \r\n");

    event_service_init(NULL);

    netmgr_service_init(NULL);

    event_subscribe(EVENT_NETMGR_DHCP_SUCCESS, wifi_event_cb, NULL);

    memset(&netmgr_params, 0, sizeof(netmgr_connect_params_t));

    strncpy(netmgr_params.params.wifi_params.ssid, ssid, NETMGR_SSID_MAX_LEN);

    strncpy(netmgr_params.params.wifi_params.pwd, passwd, NETMGR_PWD_MAX_LEN);

    netmgr_params.params.wifi_params.timeout = 5000;


    netmgr_handle = netmgr_get_dev("/dev/wifi0");

    if(netmgr_handle < 0) {

        printf("get netmgr handle failed\n");

        return;

    }

    if(netmgr_connect(netmgr_handle, &netmgr_params) != 0) {

        printf("netmgr connect failed");

        return;

    }

}

 

3.2、使用历史记录连网

#include "netmgr.h"


void start_netmgr(void) {

    printf("netmgr test \r\n");


    event_service_init(NULL);


    netmgr_service_init(NULL);
 

    netmgr_set_auto_reconnect(true);

}

 

3.3、使用netmgr范例

以上范例中注册了一个wifi_event_cb函数来监听事件,EVENT_NETMGR_DHCP_SUCCESS,表示成功获取到了IP地址。

将以上范例中的netmgr_comp_example函数加到文件solutions/helloworld_demo/helloworld.c。

int application_start(int argc, char *argv[])

     int count = 0;

     printf("nano entry here!\r\n");


     netmgr_comp_example();


     while(1) {
        printf("hello world! count %d \r\n", count++);

        aos_msleep(1000);
    };
}

 

3.4、添加netmgr模块

solutions/helloworld_demo/package.yaml文件里第二部分:依赖信息里加上 netmgr组件

## 第二部分:依赖信息

#           指定该组件依赖的组件及版本,版本支持条件比较,支持:>=v1.0, >v1.0, ==v1.0, <=v1.0, <v1.0, v1.0

#           未指定条件时,默认为 ==,如 v1.0 与 ==v1.0

# depends:                                 # <可选项> 该组件依赖其他的组件,合理的依赖才能保证组件能编译、使用

#   - minilibc: v7.2.0

#   - aos: >=v7.2.0

depends:

  - init: dev_aos

  - cli: dev_aos

  - osal_aos: dev_aos

  - haas100: dev_aos

  - netmgr: dev_aos

 

4、Netmgr命令

4.1、简介

支持使用命令的方式对Wi-Fi连网相关的操作,如,对存储的连接信息的读/写/删除,打印当前网络内的所有AP的信息,连接AP,断开AP的连接,查询网络状态等。

命令行

说明

netmgr -t wifi -i

初始化

netmgr -t wifi -a [0/1]

设置是否自动重连。0,不自动重连;1,自动重连。

netmgr -t wifi -b [0/1]

是否保存历史连接记录。0,不保存历史连接记录。1,保存历史连接记录。

netmgr -t wifi -c [ssid] [password]

使用ssid password连网

netmgr -t wifi -e

断开Wi-Fi连接

netmgr -t wifi -m

设置MAC地址

netmgr -t wifi -s

打印当前网络上的AP的信息

netmgr -t wifi -p

打印当前网络状态

netmgr -t wifi -r

读Wi-Fi配置文件

netmgr -t wifi -w [wifi_config]

写Wi-Fi配置文件。wifi_config格式,如,network={\\nssid=\"apple\"\\npassword=\"aos123456\"\\nchannel=\"1\"\\n}\\n

netmgr -t wifi -d

删除Wi-Fi配置文件

netmgr -t wifi -n

1, 使能sntp;2,关闭sntp。目前没有查询sntp状态的参数,默认是sntp功能打开。

 

4.2、命令范例

使用如下命令可以快速连SSID是"aos" 密码是"123456"的AP。

netmgr -t wifi -i

netmgr -t wifi -b 1

netmgr -t wifi -a 1

netmgr -t wifi -c aos 123456

也可以手动写入配置命令,使用如下的命令连网。其中,如果无法确定AP的channel信息,使用0进行全网段扫描。

netmgr -t wifi -i

netmgr -t wifi -w network={\\nssid=\"apple\"\\npassword=\"aos123456\"\\nchannel=\"1\"\\n}\\n

netmgr -t wifi -a 1

 

开发者支持

HaaS解决方案中心:https://haas.iot.aliyun.com/
HaaS技术社区:https://blog.youkuaiyun.com/HaaSTech


开发者钉钉群和公众号见下图,开发者钉钉群每天都有技术支持同学值班。

相关推荐

动手做个智能水族箱

伴随着人们生活水平的提高,养鱼已经成为了一种新的时尚,各种桌面鱼缸层出不穷,但是市面上的鱼缸系统多是比较简单的,智能鱼缸可谓是凤毛麟角,同时也价格不菲。鉴于此,我们HaaS团队打造了一款智能水族馆案例。通过监测水温,水位,以及水质,继而通过物联网平台的功能动态的调节鱼缸生态。...

HaaS技术社区的博客 2295

这也行?动手用Python做一个酒精检测仪,数据还能直接上云

酒精会使人意识不清晰,在很多场合都不适合饮酒,尤其是在需要驾车时。国家也出台了法律,明确禁止酒后驾驶,否则会给予非常严厉的处罚。MQ3传感器是汉威电子出品的乙醇传感器,它有快速相应、高敏感度、稳定、寿命长以及外围电路简单等多个优点,常用于酒精检测。...

HaaS技术社区的博客 4269

【HaaS Tuesday】物联网局域通信 选择 Wi-Fi or 蓝牙?听工程师们笑谈技术发展史

HaaS Tuesday 第二期上线快来交出你的一键三连!

HaaS技术社区的博客 964

HaaS Python 2.2 版本发布,更好更快更稳,将开发易用性进行到底

HaaS Python 2.2 版本发布,更好更快更稳,将开发易用性进行到底!

HaaS技术社区的博客 1156

HaaS第一本实体书籍 当代物联网开发圣经 现在开始预售

元宇宙(Metaverse)概念近期霸屏大众视野,在社会各圈层掀起热议。这一极具科技感与未来感的抽象概念激发了人们无穷想象力,现实世界与虚拟世界融合仿佛近在眼前。元宇宙概念始于《雪崩》一书,作者斯蒂文森在故事中虚构了“元界”这一世界,所有现实世界中的人在元界中均有对应的网络分身。元宇宙实现,需要六大技术的支撑,分别是物联网技术、区块链技术、交互技术、电子游戏技术、人工智能技术、边缘计算。其中物联网技术,是其中十分重要的一环,本质上,它是真实宇宙与虚拟“元宇宙”的链接,是元宇宙提升沉浸感体验的关键所在。

HaaS技术社区的博客 2196

这个夏天太热了,只能用他来保命,ESP32 + Python做一个检测紫外线设备

紫外线是阳光光线中的一部分。适当紫外线强度的照射有助于人体合成维生素D,然而,过量的紫外线暴晒,会对人体造成损害,诱发皮肤疾病。本案例的紫外线检测系统可以实时检测紫外线光强度, 并在紫外线强度过高时提醒作出相应的防护。...

HaaS技术社区的博客 2274

使用Python做一个语音播报温湿度系统,元气满满的一天从听到他开始

使用Python做一个本地语音播报温湿度系统,元气满满的一天从听到他开始。本案例利用HaaS EDU K1内置的传感器,循环检测当前温湿度,显示到屏幕上,并通过语音播报,同时上报到阿里云物联网云平台,记录数据以做进一步分析。...

HaaS技术社区的博客 1892

Python + ESP32 制作车辆定位系统,终于可以随时随地知道爱车的位置了

定位系统是以确定空间位置为目标而构成的相互关联的一个集合体或装置(部件)。这个系统可以保证在任意时刻,地球上任意一点都可以同时观测到至少4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。这项技术可以用来引导飞机、...

HaaS技术社区的博客 7789

Python + ESP32 DIY自动感应智能皂液器 避免触摸更安全

轻松制作一个智能皂液器。智能皂液器是一种非接触式的皂液投放设备,由微控制器、红外传感器、液位检测传感器、舵机等关键部件构成,其特点是非接触,定量出液,液量数据实时监控,欠液提醒等。可被广泛应用于酒店,机场,办公园区等。...

HaaS技术社区的博客 2630

羡慕《钢铁侠》电影里科技感满满的全息手势交互吗?现在你也可以!试试这款【本地手势识别案例】

羡慕《钢铁侠》电影里科技感满满的全息手势交互吗?现在你也可以!试试这款本地手势识别案例,挥挥手就能控制设备,是不是超酷

HaaS技术社区的博客 1432

ESP32 + Python 还不知道怎么垃圾分类? 用HaaS DIY一个智能垃圾桶吧

ESP32 + Python 还不知道怎么垃圾分类? 用HaaS DIY一个智能垃圾桶吧

HaaS技术社区的博客 2613

Python+ESP32 DIY 一个【赛博朋克逗猫机】 喵喵喵?今天的主子看起来有点奇怪

Python+ESP32 DIY 一个【赛博朋克逗猫机】 喵喵喵?今天的主子看起来有点奇怪

HaaS技术社区的博客 1381

Python + ESP32 DIY炫酷的物联网远程机械臂

机器人和人工智能是目前很热门的两个学科,未来也是被很看好的行业之一,而机械臂就是通往机器人和人工智能的基础。本机械臂是入门级的自由度金属机械手臂,主要包括舵机驱动板、金属机械手臂支架和四个金属齿轮舵机,同时结合HaaS开发框架,就可以通过远程控制......

HaaS技术社区的博客 4635

【HaaS Hands-On】全新视频节目上线 创意案例我们一起上手做 第一期E01: 物联网工程师 和你一起上手做遥控机械臂

【HaaS Hands-On】 全新视频节目上线!创意案例我们一起上手做 🙌第一期E01: 物联网大佬 和你一起上手做遥控机械臂快来一键三连!

HaaS技术社区的博客 771

饭碗空空 猫猫流泪 用HaaS Python DIY一个宠物自动投食器 再也不用担心主子挨饿

自动投食器是一种可以自动投喂宠物粮的设备,致力于解决当家中无人时宠物无法喂养的问题。该设备具备云端接入能力,可通过手机进行控制,拥有两种投喂模式可供选择,即在手机端手动点击投喂,或定时进行周期性的投喂;另外,还可对剩余宠物粮进行实时监控,方便用户实时了解宠物们碗中是否有粮可吃。...

HaaS技术社区的博客 1984

阿里云IoT | HaaS开源百校科技助力计划 —— 开源大使招募

👋 Hi,各位爱好科技的同学们在这个技术快速升级、重构的时代有这样一个活动,你不容错失它就是HaaS开源百校科技助力计划这是一项由阿里云IoT HaaS技术团队在全国高校推出的活动帮助未来的新一代开拓技术视野与同道中人开启技术路上的新机遇如果你正好是这样的一名青年:√ 乐于玩转物联网与嵌入式开发√ 爱好探索技术前沿√ 热爱折腾的科技Geek√ 力图探寻物联网技术在未来无限 ♾️ 的可能性你,就是我们正在寻找的校园大使!在这个圈子里你将和阿里云IoT

HaaS技术社区的博客 990

【HaaS Python硬件积木】空气质量检测模块 - CCS811

空气质量检测模块 - CCS811来这里发现更多拿来即用的硬件积木https://haas.iot.aliyun.com/solution/detail/hardware一、产品简介通过CCS811传感器模块可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2(二氧化碳)浓度,作为衡量空气质量(IAQ)的指标。引脚定义VCC:3.3VGND:接地SCL:I2C时钟SDA:I2C数字WAK:接地INT:NC(阈值中断引脚)RST:NC(复位引脚)ADD:NC二、技术参数

HaaS技术社区的博客 1491

【HaaS Python硬件积木】土壤湿度传感器

总是忘记给家里的盆栽浇水?试试这款【土壤湿度传感器】。土壤湿度传感器主要用于检测土壤中湿度是否达到阀值及湿度的大小,通过电位器调节土壤湿度控制阀值,可以自动对菜园,花园自动浇水,家庭花盆土壤湿度的控制,连上云后,还能实时监控土壤湿度,远程控制水泵浇水,再也不用担心盆栽缺水啦

HaaS技术社区的博客 4331

【HaaS Python硬件积木】4路触摸电容模块-TTP224

14:33【TTP224电容触摸模块】有别于传统的机械按键,电容按键只需要用户触摸即可输出电平,这为产品带来了更轻的交互。同时,由于电容按键特殊的电气特性,可以实现一些机械按键做不到的更有趣的交互,例如市场上有一些镜子灯将按钮“镶嵌”在镜面上,以及一些音响表面并无按键,但用手指在音响表面滑动,就可以调整音量;都是电容触摸模块应用的场景。

HaaS技术社区的博客 1365

【HaaS Python硬件积木】HCSR04超声波测距传感器

【HCSR04超声波测距传感器】使用声纳来确定物体的距离,其工作原理类似蝙蝠。HC-SR04的核心是两个超声波传感器,一个用作发射器,将电信号转换为40 KHz超声波脉冲;接收器监听发射的脉冲,如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。HCSR04可以用于机器人测距,液位检测,智能车避障,甚至超声波雷达。

HaaS技术社区的博客 2293

【HaaS Python硬件积木】继电器

【继电器】是最基础的控制元件,仅需要一个GPIO就能控制,但它却是DIY中使用最多的器件之一。应用继电器,可以通过弱电控制强电的通断(前提是:注意用电安全),例如DIY远程智能开关;控制家具通断电,实现智能家居;各位极客们快来试试看。

HaaS技术社区的博客 1873

【HaaS Python硬件积木】ULN2003A步进电机驱动

最近有很多开发者想知道如何使用HaaS开发板驱动步进电机。步进电机往往有着复杂的时序要求与严格电气要求,直接使用HaaS开发板的IO往往无法有效驱动。可以尝试使用这款HaaS Python硬件积木【ULN2003A步进电机驱动】,其内部封装了完整的电气结构,加上HaaS Python提供的软件驱动,使得开发者只需要少量代码就可以实现复杂的电机驱动。

HaaS技术社区的博客 2883

【HaaS Python 硬件积木】 BMP280气压传感器

BMP280是博世出品的气压传感器,它集成了压电压力传感单元、信号处理电路及模数转换器,气压值可以通过SPI或I2C读出,在室内导航、无人机、气象站等场景有广泛应用

HaaS技术社区的博客 3705

【HaaS Python硬件积木】AS608指纹识别模块 打造指纹门禁 开门有手就行

【HaaS硬件积木】使用AS608指纹识别模块打造炫酷指纹锁、智能门禁,再也不用担心忘带钥匙,开门有手就行

HaaS技术社区的博客 5395

HaaS Python 云端一体AI 车型识别功能

来这里发现更多有趣案例HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution车型识别系统   车型识别是识别汽车图片(完整或部件图片)的类型,目前有小轿车、多用途汽车、SUV等类别。   本案例导学步骤如下图所示。背景知识   根据拍摄照片,快速识别图片中车辆的品牌型号,提供针对性的信息和服务,可用于相册管理、图片分类打标签、电子汽车说明书、一键拍

HaaS技术社区的博客 951

HaaS Python + ESP32 打造智能洗手间 检测使用率和空气质量 帮你挑选最好的坑位

来这里发现更多有趣案例HaaS开发框架https://haas.iot.aliyun.com/solution智能洗手间   下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明。简介   在一些公共场所里,比如说商场,写字楼等,由于打扫卫生人员的不足,以及人流量的不确定性,作业人员没有办法及时的了解卫生间的空气质量,导致卫生间的空气质量不是很好。   本方案通过红外传感器来检测洗手间坑位是否有人存在,同时通过一个硫化氢的传感器,检测卫生间的空气质量,并上传到

HaaS技术社区的博客 928

【毕设参考】跌倒检测 ESP32+HaaS Python Motion API 快速打造上云的跌倒检测系统

担心家里有老人和孩子会因为跌倒受伤无法及时获取帮助?试试HaaS Python2.1新推出的Motion API,几行代码快速实现跌倒检测、行为识别,加上数据上云,任何危险立即通知!

HaaS技术社区的博客 5018

【毕设参考】 HaaS Python 打造工业级光伏面板监控上云系统

【毕设参考】 HaaS Python 打造工业级光伏面板监控上云系统

HaaS技术社区的博客 2578

【毕设参考】HaaS Python 云端一体AI【手势识别】窝在家里看电视不想动?想换台懒得找遥控器?试试解锁智能设备新玩法

【毕设参考】HaaS Python 云端一体AI【手势识别】窝在家里看电视不想动?想换台懒得找遥控器?试试解锁智能设备新玩法

HaaS技术社区的博客 1417

HaaS Python 2.1 版本更新上线 在线热更新+智能行为感知算法+更多开发板/API+精彩开发者活动 快来体验

HaaS Python 2.1 版本更新上线 在线热更新+智能行为感知算法+更多开发板/API+精彩开发者活动

HaaS技术社区的博客 2904
上一篇: 一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3
下一篇: HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
HaaS技术社区
HaaS技术社区 企业官方账号 企业官方账号
博客等级 码龄6年 8910粉丝 417原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值