设备上报状态到阿里云成功之后,还要接受来至云端下发的命令,如APP。在ESP8266接受到数据之后可将数据先进行解析,再通过自定义协议与STM32进行串口通讯,也可以将接收到的数据中的信息直接传输到UART,在这里,我用的是使用大量回调函数的ESP8266_NONOS_SDK-3.0  SDK包,在实时性上表现明显不佳,所以在无特殊要求情况下建议采用将数据传输到UART再进行解析。ESP8266 RTOS SDK 采用任务调度方式,在表现上应优于无操作系统的,建议采用RTOS SDK包。

  阿里云上具有可视化开发APP,可在线构建生成apk文件,位置:开发服务->IoT Studio,具体如何操作自行查看阿里云官方文档:https://help.aliyun.com/document_detail/110476.html?spm=a2c4g.11174283.6.821.10111668sUo8Lj

下载的SDK包中有示例工程,在目录examples下,其次网上知乎大神也给出了大量的代码示例,

关于ESP8266的工程示例:https://github.com/AngelLiang/ESP8266-Demos  ----来自知乎阏男秀

https://blog.csdn.net/xh870189248/article/details/81146532   ----来自CSDN半颗心脏

关于UART和SmartConfig配网,建议先将ESP8266的工程示例先编译下载,根据打印信息可快速了解和看懂代码,为修改做铺垫。


关于ESP8266的串口和SmartConfig本人研究的并不深入,在这仅记录自己遇到的一些问题。

关于UART串口接受数据:

  ESP8266具有两个UART,其中UART1的RX引脚被Flash-SPI复用,故一般仅用于打印系统日志。

    1.UART0在SDK中用于输出调试信息,在使用之前应先将打印信息使能关闭。在 debug.h 中屏蔽 #define MQTT_DEBUG_ON

  2.在app目录下将 -ldriver 注释掉,其次在  app/user/ 目录下添加工程示例的uart.c。( 原sdk的uart使用的是链接动态库在使用uart接口,当然也可以通过修改重新生成lib来修改uart的功能,但明显很不方便。)

  3.ESP8266_NONOS_SDK-3.0使用的是定时器回调函数的方式,ESP8266仅开放一个定时器,所以需要注意的是user_init()函数在初始化uart时候,便设置了定时器的定时任务,进入uart接收数据函数uart_test_rx。

  在之后的MTQQ的初始化中调用MQTT_Connect重置了定时器任务修改成mqtt_timer,所以可在串口初始化时屏蔽接受数据任务,新定时器任务mqtt_timer中加入串口接收数据的任务。

  在uart_test_rx中不难看出uart的TX调用的是tx_buff_enq(char* pdata, uint16 data_len),完成从串口回传任务。这里可根据功能进行修改。

关于SmartConfig配网:

  移植说明:

    wifi源码:`user/user_wifi.c`+`include/user_wifi.h`
    smartconfig源码:`user/user_smartconfig.c`+`include/user_smartconfig.h`
    wifi配置:`wifi_config.h`

  只需要拷贝以上文件即可简单移植到新工程,之后参考此调用即可。

    void ICACHE_FLASH_ATTR
    user_init(void) {
      //uart_init(BIT_RATE_115200, BIT_RATE_115200);

      wifi_set_opmode(STATION_MODE); // set wifi mode

      /* 与 smartconfig_connect() 二选一
      * wifi_connect() 在这里调用正常
      */
      //wifi_connect(wifi_connect_cb);
      /* 在这里调用不正常,无法用手机配网 */
      //smartconfig_connect(wifi_connect_cb);

    system_init_done_cb(init_done_cb_init);
   }

  在接口函数中 void smartconfig_connect(WifiCallback cb); 先进行smartconfig,如果没有配网信息则自动连接上次的wifi。在工程中使用此函数。

    void ICACHE_FLASH_ATTR
      init_done_cb_init(void) {
      //print_chip_info();

      /*
      * smartconfig_connect 只能在 init_done_cb_init 调用才正常
      * 先进行smartconfig,没有配网信息则自动连接上次的wifi
      */
      smartconfig_connect(wifi_connect_cb);
      /* OR */
      //wifi_connect(wifi_connect_cb);
    }

  SmartConfig的示例工程烧写成功后出现

    SDK ver: 2.0.0(656edbf) compiled @ Jul 19 2016 17:58:40
    phy ver: 1055, pp ver: 10.2

    SC version: V2.5.4
    [INFO] smartconfig start!
    mode : sta(5c:cf:7f:f7:99:6f)
    add if0
    wifi_smartconfig_timer_cb
    [INFO] smartconfig stop!
    wifi ssid:WIFI_SSID
    wifi pass:123456789
    [INFO] WiFi_LED_STATUS_TIMER_ENABLE
    wifi connect fail!
    scandone
    state: 0 -> 2 (b0)
    state: 2 -> 3 (0)
    state: 3 -> 5 (10)
    add 0
    aid 1
    cnt
    wifi connect fail!

    connected with WIFI_SSID, channel 11
    dhcp client start...
    wifi connect fail!
    ip:192.168.191.2,mask:255.255.255.0,gw:192.168.191.1
    wifi connect success!
    pm open,type:2 0

  配网APP源码:https://github.com/EspressifApp/EsptouchForAndroid

   配网APK:https://github.com/EspressifApp/EspRelease/tree/master/EspTouch

  ESP8266配网方式为组网模式,在打印信息出现  wifi_smartconfig_timer_cb 时手机app端输入WIFI密码和选择组网模式进行配网。

  ESP8266为2.4G模组,不支持5G WIF联网。

  阿里云IoT Studio中自生成的app无法正常配网。熟悉java可在阿里云下载源码配合Esptouch源码进行修改。

                                -----------今天也是充满希望的一天~

  

关于STM32F103+ESP8266+阿里云过程之修改SDK支持UART和SmartConfig(四)的更多相关文章

  1. 关于STM32F103+ESP8266+阿里云过程之修改SDK连接至阿里云(二)

    继上篇的阿里云物联云平台设置之后,接下来的工作就是对安信可官方给的sdk进行修改 安信可ESP系列集成环境,SDK,aliyun_mqtt_app,下载地址在上一篇博客,https://www.cnb ...

  2. 关于STM32F103+ESP8266+阿里云过程之环境搭建和阿里云数据格式设置及注意点(一)

    计划实现功能:将STM32F103采集到的温湿度,PM2.5等数值,通过UART与ESP8266通讯,使得ESP8266对外仅充当串口功能的黑盒.ESP8266通过MTQQ发布订阅数据,设备上传.接收 ...

  3. 关于STM32F103+ESP8266+阿里云过程之设备状态更新至阿里云(三)

    设备与阿里云完成发布订阅的功能,接下来就是将设备状态如温湿度,PM2.5值上报更新至阿里云. 1.查看Topic. 在阿里云平台上 设备->Topic列表中查看.在产品中也可以看到对应的Topi ...

  4. 阿里云开发工具包(SDK)

    参考: 阿里云开发工具包(SDK)For Python Alibaba Cloud SDK for Go

  5. Delphi阿里云邮件推送【支持单一发信、邮件批量发送和获取指定条件下的发送数据】

    作者QQ:(648437169) 点击下载➨Delphi阿里云邮件推送               阿里云api文档 [Delphi阿里云邮件推送]支持SingleSendMail(单一发信接口). ...

  6. Delphi阿里云对象存储OSS【支持上传文件、下载文件、删除文件、创建目录、删除目录、Bucket操作等】

    作者QQ:(648437169) 点击下载➨Delphi阿里云对象存储OSS             阿里云api文档 [Delphi阿里云对象存储OSS]支持 获取Bucket列表.设置Bucket ...

  7. 阿里云服务器mysql修改编码问题

    最近在学习struts+spring+hibernate,强烈推荐新手一本书:陈天河<轻量级web应用开发>,这本书是我见过的国内最好的书,初学者可以买本读读. 不说这个了,来说说我的问题 ...

  8. 关于阿里云ECS服务器修改远程端口的一点总结

    般修改公司的远程服务器的登录端口号分为两大步: 一.修改注册表中的两个地方的端口号:(注册表打开命令:regedit) [HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro ...

  9. 阿里云服务器Mysql修改密码

    核心架构基于阿里云服务器CentOS7.2操作系统,全面支持Java Web运行环境   Tomcat 8.5.8 JDK 8u111 MySQL5.7.16 详细信息,请在服务器执行  more r ...

随机推荐

  1. Java多线程(三):Synchronized

    多线程安全 脏读:多个线程对同一个对象的实例变量进行修改后访问,导致读到的数据是被修改过的. 实例 ThreadDomain16类 public class ThreadDomain16 { priv ...

  2. Spark学习之路(一)—— Spark简介

    一.简介 Spark于2009年诞生于加州大学伯克利分校AMPLab,2013年被捐赠给Apache软件基金会,2014年2月成为Apache的顶级项目.相对于MapReduce的批处理计算,Spar ...

  3. Git及基础命令的介绍以及如何向本地仓库添加文件

    在介绍Git的使用之前,我们得要先来了解一下Git.那么什么是Git? Git是一个版本管理工具(VCS),具有以下的特点: 分布式版本控制: 多个开发人员协调工作: 有效监听谁做的修改: 本地及远程 ...

  4. PATB 1004 成绩排名 (20)

    1004. 成绩排名 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入n名学生的姓名.学号.成绩,分 ...

  5. shell脚本开发基本规范

    当你的才华还撑不起你的野心的时候,你就应该静下心来学习.当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练.问问自己,想要怎样的人生. 欢迎加入 基础架构自动化运维:598432640,大数据S ...

  6. Java多线程同步工具类之Semaphore

    Semaphore信号量通常做为控制线程并发个数的工具来使用,它可以用来限制同时并发访问资源的线程个数. 一.Semaphore使用 下面我们通过一个简单的例子来看下Semaphore的具体使用,我们 ...

  7. MySQL性能分析之Explain

    目录 Explain基础 Explain进阶 Explain基础 关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output ,这里需要强调rows是核心指标, ...

  8. 一套简单的web即时通讯——第三版

    前言 接上版,本次版本做了如下优化: 1.新增同意.拒绝添加好友后做线上提示: 2.新增好友分组,使用工具生成后台API,新增好友分组功能,主要功能有:添加分组.重命名分组名称.删除分组 3.新增好友 ...

  9. POJ 2455:Secret Milking Machine(二分+最大流)

    http://poj.org/problem?id=2455 题意:给出n个点和m条无向路,每条路都有一个长度.从1点到n点要走t次两两互不重合的路.求出每条1->n的路中相邻两点最大值的最小值 ...

  10. BZOJ 1878:[SDOI2009]HH的项链(莫队算法)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题意:…… 思路:比上题还简单很多.数字很小,开一个数组哈希记录出现次数(记得数组要开1e6) ...