乐鑫esp8266学习rtos3.0笔记第4篇:带你捋一捋微信公众号 airkiss 配网 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。(附带demo)

版权声明:本文为博主半颗心脏一心一血敲出来的原创作品,未经博主允许不得转载,多谢支持。 https://blog.csdn.net/xh870189248/article/details/89187507

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

1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。
2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。
3、 Esp8266之 利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。
4 、Esp8266之 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。
5 、Esp8266之 原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。
6 、Esp8266之 了解 SmartConfig与Airkiss一键配网,给8266配网上云端。无需把wifi名字密码写在固件里。
7 、Esp8266之 了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。
8、 Esp8266之 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。
9、 Esp8266进阶之路第1篇: [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
10、 Esp8266进阶之路第2篇: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
11、 Esp8266进阶之路第3篇: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
12、 Esp8266进阶之路第4篇: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。
13、 Esp8266进阶之路第5篇: 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
14、 Esp8266进阶之路第6篇: esp8266的 FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。
15、 Esp8266进阶之路第7篇: esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
16、 Esp8266进阶之路第8篇: esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
17、 Esp8266进阶之路第9篇: esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
18、 Esp8266进阶之路第10篇: esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
19、 Esp8266进阶之路第11篇esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
20、 Esp8266进阶之路第12篇深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。
21、 Esp8266进阶之路第13篇浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。
22、 Esp8266进阶之路第14篇esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事。。
23、 Esp8266进阶之路第15篇再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。。
24、 Esp8266进阶之路第16篇渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。
25、 Esp8266进阶之路第17篇深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。
26、 Esp8266进阶之路第18篇RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。
27、 Esp8266进阶之路第19篇跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。
28、 Esp8266进阶之路第20篇教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。
29、 Esp8266进阶之路第21篇百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接支持阿里云规则引擎。
30、 Esp8266进阶之路第22篇乐鑫esp8266 SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。
31、 Esp8266进阶之路第23篇当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。
32、 Esp8266进阶之路第24篇细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。
33、 Esp8266进阶之路第25篇如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
34、 Esp8266进阶之路第26篇乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。
35、 Esp8266进阶之路第27篇乐鑫esp8266芯片借助机智云平台做一个商业化的七彩RGB灯泡可调整体方案项目,炫彩夺目高大尚。
36、 Esp8266学习rtos3.0笔记第1篇认识esp8266 Rtos 3.0 sdk 工程结构,esp8266如何向esp-idf工程靠近的,如何自定义头文件编译?
37、 Esp8266学习rtos3.0笔记第2篇你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。
38、 Esp8266学习rtos3.0笔记第3篇 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。
39、 Esp8266学习rtos3.0笔记第4篇 带你捋一捋市面上的微信公众号配网智能设备 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。


  • 很多人怎么联系我一起学习进步,下面打个小小公告和干货无偿分享:

玩转esp8266带你飞、加群付费QQ群,提高门槛,不喜的朋友勿喷勿加:434878850
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32


一、前言。


     记得是哪位哲人说过:人要在挫折中成长,在一次次失败中才会逐渐明白前面的路途更加艰难,等着自己的是将是怎么样的困难,要不想被他们打败,那只要打败他们! ------- 源自高三看的一个励文。

     目前的微信小程序可是越来越火了!而且现在来看,在微信小程序开发一个应用,可以跨平台进行,可谓是大大节省开发周期,最近很多人都在群里问这个事情,我也慢慢为大家阐述下这个过程是怎么样的!

     在之前的文章点我链接,我提到过需要一个服务器做一个 H5界面实现在微信公众号加载以及在esp8266的配网原理。在esp8266端是 rtos2.0或者是nonos 2.0 、3.0的实现,然而直到今天 2019-4-10为止,官网仍出来近场发现的代码示范。虽然支持airkiss配网,但是这远远不足我们的开发需求。

     一气之下,我查阅微信硬件开发文档以及对 esp8266的熟悉开发程度,三个小时就搞出来了,对于在移植过程的坑,配网以及兼容iosAndroid端!

在这里插入图片描述


二、准备材料。


  1. 一个具备设备功能接口开启的公众号!一般是企业认证的或者是个人测试号! 开同设备功能可有可无!
  2. 一个可外网连接的服务器,阿里云购买或者其他平台!
  3. 一个备案成功的域名,而且具备SSL证书!
  4. 一个esp8266模块的最小系统!

      对于如何实现微信端的代码开发流程,本博文不再赘述!后面会出更详细的教程给大家,而本文主要讲述微信近场发现的原理以及如何发送消息给微信公众号,实现绑定!


三、绑定原理。


      前面已经说了:乐鑫的esp8266 rtos3.1 sdk代码(下面统一为此版本的 sdk )配网模式已经是支持airkiss的了!但是直到今天 2019-4-10为止,没近场发现的代码;我去微信硬件云文档看了看,其移植也是蛮简单的!

      下图为微信硬件云提供,可以看到其原理非常简单,是一个本地的UDP通讯的过程;由设备端esp8266往局域网内的所有设备指定的端口12476发送一个特定的报文,微信客户端就会近场发现收到此信息!

在这里插入图片描述


  • 假设当微信客户端收到此设备发来的信息之后,处理给服务器,就可以实现绑定当前配网用户保存在服务器记录里面了!

四、代码实现。


  • 一、首先要开启 udp客户端,因为这个版本是用的是lwip,所以创建socket
  • 二、然后向255.255.255.255这个服务器的12476端口发送指定的内容,此内容要经过微信提供的库文件的某个函数再一次处理得到! 并非直接传自己的内容过去!
  • 三、最后开始发送,微信提醒最好是 每隔5s内发送一次,发送20次以上,提高设备被微信客户端发现的速度:

4.1 添加airkiss静态库到工程!(非常重要)



4.2 创建socket


    int sock_fd;
    struct sockaddr_in client_addr;
    
    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock_fd == -1)
    {
        printf("[xuhong] failed to create sock_fd!\n");
        vTaskDelete(NULL);
    }

    memset(&client_addr, 0, sizeof(client_addr));
    client_addr.sin_family = AF_INET;
    client_addr.sin_addr.s_addr = inet_addr("255.255.255.255");
    client_addr.sin_port = htons(LOCAL_UDP_PORT); //宏定义 12476

4.3 开始广播!


    int err;
    int count = 0;
    while (1)
    {
        lan_buf_len = sizeof(lan_buf);
        
        //把数据给微信接口二次加密处理返回
        airkiss_lan_ret_t ret = airkiss_lan_pack(AIRKISS_LAN_SSDP_NOTIFY_CMD, ACCOUNT_ID, buffer, 0, 0, lan_buf, &lan_buf_len, &akconf);
        if (ret != AIRKISS_LAN_PAKE_READY)
        {
            printf("Pack lan packet error! \n");
            vTaskDelete(NULL);
        }
        err = sendto(sock_fd, (char *)lan_buf, lan_buf_len, 0, (struct sockaddr *)&client_addr, sizeof(client_addr));
        ESP_LOGI(TAG, "[SY]  send local !  %d ", count); //打印广播的次数
        if (err < 0)
        {
            printf("[SY] failed to send local ! ... \n");
        }
        else
        {
            count++;
            if (count > COUNTS_BOACAST)
            {
               //关闭通道
                handleCreatSocket = NULL;
                shutdown(sock_fd, 0);
                close(sock_fd);
                vTaskDelete(NULL);
            }
        }
        vTaskDelay(1500 / portTICK_RATE_MS); //延迟1.5秒
    }


五、特别强调睬坑。


  • 前端笔记:onScanWXDeviceResult方法在苹果手机包括iPhone X、iPhone6收不到wifi设备的传来的一些信息!本人经过多次查阅,需要在openWXDeviceLib方法调用时候,也就是初始化硬件设备库,传入加上这个公众号原始ID。具体如下:
       //初始化硬件设备库,否则部分机型无法初始化成功导致后面的扫描不了本地设备!
        wx.invoke('openWXDeviceLib', {'connType': 'lan', 'brandUserName': 'gh_xxxxxx'}, function (res) {
            alert("openWXDeviceLib:" + JSON.stringify(res));
        });

  • ①:【设备端睬坑】微信公众号配网airkiss开发流程,设备端的deviceID传过来格式不能是 json 格式,个人建议把此字符串base64加密后传给微信。否则在苹果直接没有回调也没有错误信息!!!
  • ②:【前端js睬坑】如果初始化js sdk时候没有传公众号id,仅仅对于苹果手机比如 iPhone X本地扫描局域网设备没有回调,报错信息也没有!
  • ③:【设备端睬坑】最后一点:设备端的传进去的微信公众号必须是 为微信公众号的原始ID,格式:gh_xxxx!否则苹果手机没有回调信息!但安卓手机与此无关!就是下面这个函数的调用传参数特别注意:

airkiss_lan_pack(airkiss_lan_cmdid_t ak_lan_cmdid, void* appid, void* deviceid, void* _datain, unsigned short inlength, void* _dataout, unsigned short* outlength, const airkiss_config_t* config);
  • 函数实现打包,ak_lan_cmdid为要打包的类型,appid为厂商公众号ID,deviceid为设备ID,_datain为要发送的数据,inlength为发送数据的长度,_dataout为打包后的数据缓冲区,outlength为缓冲区的空间,函数成功返回后将赋值为数据包的实际长度!

  • 下面是我本博文的硬件代码的在微信公众号的效果显示:

六、下载。


猜你喜欢

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