首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-11-14 06:42
  • 3427
  • 5581
blog.csdn.net

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

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配网小工具。
13、esp32 内置 dns 服务器,无需外网访问域名返回指定网页。
14、esp32 sdk编程实现门户强制认证,连接esp32热点之后,自动强制弹出指定的登录界面。
15、认识本地离线语音唤醒识别框架 esp-skainet ,实现较低成本的硬件语音本地识别控制。
16、学习本地语音唤醒离线识别框架 esp-skainet ,如何修改唤醒词? 如何自定义命令词?如何做意图动作?
17、全网首发,乐鑫esp32 sdk直连京东微联·小京鱼 · IoT开放平台,实现叮咚音响语音智能控制。
18、入门京东微联·小京鱼的控制面板H5开发,读懂vue语法,做自己的控制页面。
19、重磅开源,如何在微信小程序上ble蓝牙配网esp32,blufi的那些事!
20、一篇好文,开发过程中编译esp32固件太大,无法正常启动?教你如何自定义分区表partitions.csv。
21、 esp32蓝牙配网blufi的高度封装,集成简单、使用简单、容易上手,提高开发效率!
22、讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等!
23、安信可 esp32-a1s 音频开发板移植最新 esp-adf 音频框架,小试牛刀如何实现在线文字转语音播放。
25、分享在 esp32 SDK实现冷暖光色温平滑调节的封装,轻松集成到您的项目去。


文章目录

    • 一、前言
    • 二、微信公众号的“物联网生态”
      • 微信airkiss配网技术
        • 1.微信配网
        • 2.局域网发现
        • 3. 局域网通讯:
    • 二、esp32支持 airkiss2.0
        • 下面是微信配网流程:
        • 下面是微信近场发现流程:
    • 三、esp32 使用代码详解
        • 1 初始化微信公众号等参数;
        • 2 微信配网开始
        • 3 创建任务接收微信配网和近场发现的全部事件
        • 4 事件回调处理
        • 5 其他注意事项;
    • 四、其他
    • 另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

在这里插入图片描述


一、前言


       最近在看 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.0 和 airkiss3.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 ""       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3 创建任务接收微信配网和近场发现的全部事件
xTaskCreate(TaskAirKissListener, "TaskAirKissListener", 1024 * 2, NULL,  8, NULL);
  • 1
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;
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
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的半颗心脏的文章"https://blog.csdn.net/xh870189248/article/details/102293993"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top