乐鑫Esp32学习之旅 12 开源一个微信公众号airkiss配网esp32以及局域网发现功能的工程,分享一个airkiss配网小工具。(附带Demo)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xh870189248/article/details/102293993

  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。
2、 巧用eclipes编辑器,官方教程在在Windows下搭建esp32开发环境,打印 “Hellow World”。
3、 认识基本esp32的GPIO接口,开始点亮您的第一盏 LED和中断回调实现按键功能 。
4、体会esp32的强大的定时器功能, 实现定时2s闪烁一盏LED灯。
5、接触实践esp32的pwm宽度脉冲功能, 实现呼吸效果闪烁一盏LED灯。
6、smartConfig和微信airKiss在esp32的实现,一键配网轻松快捷连接路由器。
7、利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。
8、esp32上实现本地 UDP 客户端和服务端角色,在局域网内实现通讯。
9、esp32上实现本地 TCP 客户端和服务端角色,可断线重连原路返回数据。
10、乐鑫esp32 SDK编程利用rmt驱动ws2812七彩灯,实现彩虹渐变效果。
11、入门 乐鑫esp-adf 音频框架开发,esp32造一个蓝牙耳机,实现切换歌曲,获取歌曲信息等功能。
12、开源一个微信公众号airkiss配网esp32以及局域网发现功能的工程,分享一个airkiss配网小工具。



在这里插入图片描述


一、前言


       最近在看 esp32-lyart-mini 板子,已在某宝购买了,这是一个乐鑫新的开发板,看到支持语音唤醒对话,于是乎去翻源码,无意中看到 airkiss 配网的源码和近场发现的示范,对于我来说,无疑是最大金库。

       乐鑫的这个 esp32 是一个双模的芯片,Wifi + ble 支持。上个博文我已经做了一个如何在微信小程序实现七彩蓝牙控制esp32,无疑是自己学过的东西最大总结的一个作品;今天我再来分享一波如何在微信公众号实现 airkiss2.0 配网和近场发现功能;


二、微信公众号的“物联网生态”


       我做了很多的微信项目,我敢断言:微信公众号目前是最好的结合物联网做项目的实践,他支持 airkiss 配网、近场发现以及蓝牙 airSync 蓝牙设备间的通讯,而微信小程序是2016年出来的,目前没有把 airkiss 配网api提供出来,仅有一个不错的蓝牙接口可以通讯蓝牙设备;

       说了这么多,我这里先介绍微信公众号上做wifi类别硬件设备交互必备技能和深入分析:airkiss ;

微信airkiss配网技术

       AirKiss是微信硬件平台为Wi-Fi设备提供的微信配网、局域网发现和局域网通讯的技术。开发者若要实现通过微信客户端对Wi-Fi设备配网、通过微信客户端在局域网发现Wi-Fi设备,或者把微信客户端内的音乐、图片、文件等消息通过局域网发送至Wi-Fi设备,需要在硬件设备中集成相应的AirKiss静态库。

       AirKiss目前有2个版本,分别是 airkiss2.0airkiss3.0,区别如下:

  • Airkiss2.0:支持微信配网和局域网发现;
  • AirKiss3.0:支持局域网发现和局域网通讯;

1.微信配网


2.局域网发现


3. 局域网通讯:

       对于支持AirKiss局域网通讯的Wi-Fi设备,用户可以使用微信客户端发现与手机在同一局域网下的Wi-Fi设备,比如下面的微信公众号打印相片;


二、esp32支持 airkiss2.0


       看见标题,大家都很清晰了,作为一个wifi芯片,支持 airkiss2.0 已经逐渐成为标准,但是 esp32 没支持 airkiss3.0 对于我来说确实是个遗憾!我也不知道哪个芯片支持 airkiss3.0 ,估计价格也不菲吧!

       airkiss2.0支持微信配网以及局域网发现,下面我统称把 局域网发现 统一为 近场发现


下面是微信配网流程:


下面是微信近场发现流程:


三、esp32 使用代码详解


       为了更好屏蔽细节,实现解耦、高度封装微信配网以及近场发现的逻辑业务,我把实现在 eps32 的代码封装成了组件,并且编译成静态库!

       下面仅仅教大家如何使用,非常简单,会简单C语言即可使用;

1 初始化微信公众号等参数;

//微信公众号的原始ID
#define CONFIG_AIRKISS_APPID "gh_ee12f1dffa4e"    
//设备id 也就是自定义消息, 近场发现用到        
#define CONFIG_AIRKISS_DEVICEID "https://github.com/xuhongv"
//加密密钥,为null即可
#define CONFIG_DUER_AIRKISS_KEY ""       

2 微信配网开始

//开始配网,传入微信公众号的原始ID等参数
airkiss_config_info_t air_info = AIRKISS_CONFIG_INFO_DEFAULT();    
air_info.lan_pack.appid = CONFIG_AIRKISS_APPID;    
air_info.lan_pack.deviceid = CONFIG_AIRKISS_DEVICEID;    
air_info.aes_key = CONFIG_DUER_AIRKISS_KEY;    
airkiss_start(&air_info);

3 创建任务接收微信配网和近场发现的全部事件

xTaskCreate(TaskAirKissListener, "TaskAirKissListener", 1024 * 2, NULL,  8, NULL);

4 事件回调处理

/**
 * @description:  微信配网已经近场发现的事件监听
 * @param {type} 
 * @return: 
 */
void TaskAirKissListener(void *p)
{
    xAirKissMsg sMsg;
    while (1)
    {
        if (xAirKissReceiveMsg(&sMsg))
        {
            ESP_LOGI(TAG, "xAirKissReceiveMsg %d", sMsg.type);
            switch (sMsg.type)
            {
            case xAirKiss_MSG_TYPE_SATRT: // 开始配网 嗅探
                ESP_LOGI(TAG, "xAirKissReceiveMsg xAirKiss_MSG_TYPE_SATRT");
                break;
            case xAirKiss_MSG_TYPE_CHANNLE_LOCKED: // 已经监听到了airkiss的数据,锁定了信道
                break;
            case xAirKiss_MSG_TYPE_GET_SSID_PASSWORD: // 成功获取路由器名字和密码
                ESP_LOGI(TAG, " get ssid[len:%d]: %s", sMsg.ssidLen, (char *)sMsg.ssid);
                ESP_LOGI(TAG, " get password[len:%d]: %s", sMsg.passwordLen, (char *)sMsg.password);
                //连接路由器
                wifi_config_t wifi_config;
                bzero(&wifi_config, sizeof(wifi_config_t));
                memcpy(wifi_config.sta.ssid, sMsg.ssid, sMsg.ssidLen);
                memcpy(wifi_config.sta.password, sMsg.password, sMsg.passwordLen);
                ESP_ERROR_CHECK(esp_wifi_disconnect());
                ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
                ESP_ERROR_CHECK(esp_wifi_connect());
                break;
            case xAirKiss_MSG_TYPE_TIMEOUT: // 失败获取路由器名字和密码,超时
                break;
            case xAirKiss_MSG_TYPE_SEND_ACK_TO_WEICHAT_OVER: // 配网成功后,设备端发送配网成功的ack到微信端
            {
                //这里开始近场发现,注意的 CONFIG_AIRKISS_DEVICEID 务必是非json格式,个人建议是 base64 加密之后字符串
                airkiss_lan_pack_param_t *air_info = calloc(1, sizeof(airkiss_lan_pack_param_t));
                air_info->appid = CONFIG_AIRKISS_APPID;
                air_info->deviceid = CONFIG_AIRKISS_DEVICEID;
                airkiss_start_local_find(air_info);
            }
            break;
            case xAirKiss_MSG_TYPE_LOCAL_FIND_START: //开始近场发现
                ESP_LOGI(TAG, "xAirKissReceiveMsg xAirKiss_MSG_TYPE_LOCAL_FIND_START");
                break;
            case xAirKiss_MSG_TYPE_LOCAL_FIND_SENDING: //开始近场发现 发送消息中
                ESP_LOGI(TAG, "xAirKissReceiveMsg xAirKiss_MSG_TYPE_LOCAL_FIND_SENDING");
                break;
            case xAirKiss_MSG_TYPE_LOCAL_FIND_STOP: //结束近场发现
                ESP_LOGI(TAG, "xAirKissReceiveMsg xAirKiss_MSG_TYPE_LOCAL_FIND_STOP");
                xEventGroupSetBits(s_wifi_event_group, AIRKISS_DONE_BIT);
                //结束所有配网队列
                airkiss_stop_all();
                //删除本任务
                vTaskDelete(NULL);
                break;
            default:
                break;
            }
        }
    }
}

5 其他注意事项;

  • 请务必在系统的 station 模式之后调用 airkiss_start() 接口!
  • 请务必在连接成功路由器之后,调用 airkiss_nofity_connect_ok() 通知SDK发送ack给微信客户端,以表明配网成功!

四、其他

       公众号配网是我的微信测试号,关注二维码如下,或者搜索公众号 gh_6b7ce0fcdb0f 关注即可,因为自己diy,只能用这个微信公众测试号来做,非公司性质公众号,最大只能是 100 个粉丝,如果关注失败了,请联系我!

  • 微信公众号效果图:
  • 【踩坑点①】微信公众号配网airkiss开发流程,设备端的deviceID传过来格式不能是 json 格式,个人建议把此字符串base64加密后传给微信。否则在苹果直接没有回调也没有错误信息!!!

  • 【踩坑点②】设备端的传进去的微信公众号必须是为当前配网微信公众号的原始ID,格式:gh_xxxx!否则苹果手机没有回调信息!但安卓手机与此无关!就是下面这个函数的调用传参数特别注意!

  • 本博文涉及到的代码获取途径:请关注下方微信公众号,发送 191006 获取;


另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

  • 玩转esp8266带你飞、加群付费QQ群,不喜的朋友勿喷勿加:434878850
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!

猜你喜欢

转载自blog.csdn.net/xh870189248/article/details/102293993