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实现冷暖光色温平滑调节的封装,轻松集成到您的项目去。
最近在看 esp32-lyart-mini
板子,已在某宝购买了,这是一个乐鑫新的开发板,看到支持语音唤醒对话,于是乎去翻源码,无意中看到 airkiss 配网的源码和近场发现的示范,对于我来说,无疑是最大金库。
乐鑫的这个 esp32 是一个双模的芯片,Wifi + ble
支持。上个博文我已经做了一个如何在微信小程序实现七彩蓝牙控制esp32,无疑是自己学过的东西最大总结的一个作品;今天我再来分享一波如何在微信公众号实现 airkiss2.0 配网和近场发现功能;
我做了很多的微信项目,我敢断言:微信公众号目前是最好的结合物联网做项目的实践,他支持 airkiss 配网、近场发现以及蓝牙 airSync 蓝牙设备间的通讯,而微信小程序是2016年出来的,目前没有把 airkiss 配网api提供出来,仅有一个不错的蓝牙接口可以通讯蓝牙设备;
说了这么多,我这里先介绍微信公众号上做wifi类别硬件设备交互必备技能和深入分析:airkiss ;
AirKiss是微信硬件平台为Wi-Fi设备提供的微信配网、局域网发现和局域网通讯的技术。开发者若要实现通过微信客户端对Wi-Fi设备配网、通过微信客户端在局域网发现Wi-Fi设备,或者把微信客户端内的音乐、图片、文件等消息通过局域网发送至Wi-Fi设备,需要在硬件设备中集成相应的AirKiss静态库。
AirKiss目前有2个版本,分别是 airkiss2.0
和 airkiss3.0
,区别如下:
对于支持AirKiss
局域网通讯的Wi-Fi设备,用户可以使用微信客户端发现与手机在同一局域网下的Wi-Fi设备,比如下面的微信公众号打印相片;
看见标题,大家都很清晰了,作为一个wifi芯片,支持 airkiss2.0 已经逐渐成为标准,但是 esp32 没支持 airkiss3.0 对于我来说确实是个遗憾!我也不知道哪个芯片支持 airkiss3.0 ,估计价格也不菲吧!
airkiss2.0支持微信配网以及局域网发现,下面我统称把 局域网发现 统一为 近场发现;
为了更好屏蔽细节,实现解耦、高度封装微信配网以及近场发现的逻辑业务,我把实现在 eps32 的代码封装成了组件,并且编译成静态库!
下面仅仅教大家如何使用,非常简单,会简单C语言即可使用;
//微信公众号的原始ID
#define CONFIG_AIRKISS_APPID "gh_ee12f1dffa4e"
//设备id 也就是自定义消息, 近场发现用到
#define CONFIG_AIRKISS_DEVICEID "https://github.com/xuhongv"
//加密密钥,为null即可
#define CONFIG_DUER_AIRKISS_KEY ""
//开始配网,传入微信公众号的原始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);
xTaskCreate(TaskAirKissListener, "TaskAirKissListener", 1024 * 2, NULL, 8, NULL);
/**
* @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;
}
}
}
}
airkiss_start()
接口!airkiss_nofity_connect_ok()
通知SDK发送ack给微信客户端,以表明配网成功! 公众号配网是我的微信测试号,关注二维码如下,或者搜索公众号 gh_6b7ce0fcdb0f
关注即可,因为自己diy,只能用这个微信公众测试号来做,非公司性质公众号,最大只能是 100 个粉丝,如果关注失败了,请联系我!
【踩坑点①】微信公众号配网airkiss开发流程,设备端的deviceID传过来格式不能是 json 格式,个人建议把此字符串base64加密后传给微信。否则在苹果直接没有回调也没有错误信息!!!
【踩坑点②】设备端的传进去的微信公众号必须是为当前配网微信公众号的原始ID,格式:gh_xxxx!否则苹果手机没有回调信息!但安卓手机与此无关!就是下面这个函数的调用传参数特别注意!
本博文涉及到的代码获取途径:请关注下方微信公众号,发送 191006
获取;
esp8266
带你飞、加群QQ
群,不喜的朋友勿喷勿加:434878850