原创 ESP8266 SDK 的开发过程。

2018-6-22 11:26 5508 14 1 分类: 智能硬件 文集: ESP8266
ESP8266的资料很多,乐鑫和安信可,还有很多博客都写过,记录过开发的过程和心得。
但是我刚一接触,还是丈二和尚摸不着头脑。  
不是资料不够多,而是太多,太乱,太杂了。一下子信息量太大,消化不了。
好多技术公司,文档写的乱七八糟,没有调理和系统。 
整理了好几天,才有点理顺思路。

1 资料。
我认为重要的文档。 
《ESP8266 NON-OS SDK  API 参考》     
《ESP8266 系统描述》
《ESP-WROOM-02  技术规格书  》
基本的就这些了,以后再说 一键配网 和 IOT联网的事情。 
我只是用到那,看那。 不用的基本不看。    
这些文档应该在 乐鑫的网站上都有,但是说实话,真不一定好找。我感觉挺乱的。

2 买个硬件。  
我买的是  ESP-WROOM-02,是找一个QQ上的销售买的。  后来才知道是乐鑫的销售。。。我是个很不认真的人。
才开始我还一直以为是在和 安信可的 技术人员打交道,安装的也是安信可的开发环境。

3 搭一个开发环境。
安信可的网站上有详细的介绍。
http://wiki.ai-thinker.com/esp8266
一步一步的来,没有什么难度。写的很详细。 

安信可 ESP 系列一体化开发环境是安信可科技推出的基于 Windows + Cygwin + Eclipse + GCC 的综合 IDE 环境
文件名 描述 备注
Cygwin.exe cygwin和xtensa编译器环境 含ESP8266 和 ESP31B/ESP32 开发环境
Eclipse.exe eclipse c/c++ 开发工具,仅在官网版本基础上打包了jre运行环境 本机已经安装 eclipse cdt     环境的的无需重复下载
ESP8266IDE.exe 一体化开发环境配置工具

乐鑫的开发环境 好像是LINX的, 我畏难,就没有仔细看。

一旦开始就成功了50%。 光看资料不如动手来的实在。
先找个小程序,编译一下。  在网上https://blog.csdn.net/xh870189248/article/details/78126689  有个叫 半颗心脏 的博客, 写的很详细。
COPY 了他的程序,放在void ICACHE_FLASH_ATTR   user_init(void)  这个函数中。 

其实我刚开始对里面的回调函数 理解不深, 以前理解的MCU 是个单一的WHILE(1) 循环,这个怎么没有?
估计是8266里面已经把系统做进去了,他会自动检测 回调函数的 调用条件。
编译后,没有出现ERROR, 很好。 看来是得到了2个BIN文件  , eagle.flash.bin    和   eagle.irom0test.bin      
后面是要放的地址。
下一步就是要把BIN文件下载到 8266中去。 用到的 烧录软件:ESPFlashDownloadTool_v3.6.2.2.exe                    

所有自己编译出来的工程,都是有四个文件要烧录的,其中2个是必须烧录的(防止初始化失败),这2个文件分别是 esp_init_data_default.bin blank.bin,烧录地址根据您的8266型号区别,
这4个文件 都在 D:\AiThinkerIDE_V0.5\。。。。。\bin  目录下。 

esp_init_data_default.bin blank.bin  是系统自带,已经编译好,只需要添加上去,一起下载就好
eagle.flash.bin  and eagle.irom0text.bin  是自己编译的,4个文件一起下载。

下载时 ,把这个几个BIN文件地址对应好,IO0接地 就可以下载了, IO0接地后,还得上电一次。
下载后 ,如果不出意外,串口接收到的都是乱码。  必须用波特率74880    来接收。 
我第一次下载,是乱码,以后N次 都是乱码。 整整一上午都没有搞好。头发都快冒烟了。 上网查资料,问乐鑫的F1,  不停的变化花样和程序下载。
中午垂头丧气的吃饭,回来后再试着下载,竟然好了。 从串口下载看,正常了。  
虽然我设定的波特率是115200 ,不影响它以74880 的波特率顽固的输出。但是毕竟输出正常了,LED 也正常的闪烁了。 
一般的串口助手  没有74880的波特率的选项。 好不容易才找到一个,下载安装时,还免费自动安装了好多软件。。。。。。这服务真温馨。

乐鑫的AT指令程序 默认初始化后是115200波特率输出的。 
其余的,需要在UART_INIT中  把波特率更改为115200 , 否则默认是74880 。 


今天 把smart  config   一键配网程序 添加上去。   一次性成功。。。兴奋。。。没想这么顺利。
/*
 * 扫描按键 是为了配网
 */
void searchKey(void)
{
if(GPIO_INPUT_GET(GPIO_ID_PIN(2))==0x00)//读取GPIO2的值,按键按下为0
{
delay_ms(20); //延时20MS,去抖
if(GPIO_INPUT_GET(GPIO_ID_PIN(2))==0x00)
{
os_printf("start smart config_");
os_printf("\r\n\r\n");
//配置一键配网类型
smartconfig_set_type(SC_TYPE_ESPTOUCH ); //SC_TYPE_ESPTOUCH,SC_TYPE_AIRKISS,SC_TYPE_ESPTOUCH_AIRKISS
//开启station模式
wifi_set_opmode(STATION_MODE);
//开始一键配网等待
smartconfig_start(smartconfig_done);
}
}
}
...................... 
2018  0628   

昨天烧写了一个TCP 客户端的程序。  ESP8266 复位几次后,还能连接上服务器。今天 再上电,就一直复位,连工作状态也进入不了了。
ets Jan  8 2013,rst cause:1, boot mode3,2)

load 0x40100000, len 25396, room 16 
tail 4
chksum 0x85
load 0x3ffe8000, len 916, room 4 
tail 0
chksum 0x11
load 0x3ffe83a0, len 868, room 8 
tail 12
chksum 0x0c
csum 0x0c
rf_cal[0] !=0x05,is 0xFF

根据API 使用手册上  说,复位的原因是上电。
可我仔细排查了电源,没有问题。 
把AT的BIN文件  烧写进去,  AT指令一切正常。  看来不是电源的问题。 
再烧写自己的程序,一直复位。。。。  奇怪 。。。。故障排查中。。。。2018 0629

这几天很是郁闷。 
刚拿到8266的时候,用MCU 控制8266 ,AT指令很容易的样子。 
当PCB打样来后,正式开始运行时,才发现玩玩容易,商用并不容易。 
三天了,总是在连接服务器后出现闪退的现象。
开始以为是电源不纯净,加了N多电容,一时感觉好像好点了,以为找到了原因, 但是长时间运行还是有闪退。
用网络调试助手模拟一个设备,  没有发现闪退的现象。。。排除阿里云服务器的问题。
用一个单独的WROOM-02模块   ,用调试助手 AT 一步一步连接,连接成功后,用AT+CIPSTATUS  指令 不断的监视其状态,
发现其闪退的时候,出现状态2,或4.       
状态2 是ESP8266 Station 已连接 AP,获得 IP 地址,  这时候只要连接一下服务器就可以了。
状态4  则必须连接一下AP后  再连接一下服务器才可以。
这状态的获取  好像没有什么意义啊! 没有什么指令 可以让我知道 设备曾经闪退过。

这几天 闪退的次数少多了,一天偶尔一次,感觉稳定点了,心里比较踏实。 
改进的地方很多,但是不知道那个起到了主要左右。
1 去掉了8266的TCP 保活机制。   服务器的保活时间增加到20秒。
2 电源要求极其纯净
3 在网络拥堵的情况下,发现有闪退闪连接的现象。

我其实对TCP协议的包并不熟悉,用软件抓包来看,在闪断闪联的时候,抓到服务器给8266 的RST 包,8266回应的DUP 包。  
服务器的软件工程师和8266的工程师 都说了一堆我听不懂的话来证明自己没有问题。

我上网找了半天,在网上没有发现ESP8266有这个问题的提问,说明乐鑫的工程师可靠性比较高。
只能沉下心来找自己的问题。
2018 0711

今天从乐鑫的官网找到了这个: ESP8266_NONOS_SDK-2.2.0_tcpclient   , 烧写进去,改了一下WIFI 的SSID 和PASSWORD ,还有服务器的地址和端口。
顺利的连接到了自己的服务器。  
但是要定时的发送心跳包时 出了点阻碍。  不知道怎么写程序  发数据给服务器。 
用了个定时器, 回调了一个发送的函数,但是调试的时候,发现没有反映。
看SDK 发现应该还有个参数。 加上参数就好了。   os_timer_setfn(&heart_timer, (os_timer_func_t *)user_send_data, pespconn);

接收的时候,里面有个接收完成的回调函数。 他们的回调函数 用之前 好像还要regist 一下,  不理解其中的运作。

espconn_regist_recvcb(pespconn, user_tcp_recv_cb); //接收成功后的回调函数
espconn_regist_sentcb(pespconn, user_tcp_sent_cb); //发送成功后的回调函数
 
困难重重是因为不熟悉造成的。 不熟悉开发环境,不熟悉回调函数,不熟悉乐鑫的编程风格。。。      
下一步  是和smartconfig  整合 在一起。
这个 ESP8266_NONOS_SDK-2.2.0_tcpclient    中 连接AP  的SSID & PASSWORD 是写死在数组中的。  
先去网上看看 别人是怎么操作的。。。。
2018 07 12

其实很多时候,难在入门。
就乐鑫的这个SDK 开发而言。 只要把编译程序Cygwin 书写程序  Eclipse  配置好, 在把下载程序 ESPFlashDownloadTool_v3.6.2.2.exe     
会用这些程序,就成功了70%。  
一般的IDE 都把这3者集成在一起了,降低了开发的入门难点。乐鑫的这方便做的很差。

乐鑫也有做的很好的一方面,他们的SDK 写的不错。 各种DEMO程序都有,常用的功能可以很容易的找到,稍加修改就可以使用了。 
经过使用,发现DEMO 和SDK很稳定.  反而是AT指令 部分有一些未知的故障。

这几天彻底的舍弃了AT指令+ MCU的方式。                           
-----------------------------------------------------
2018 0731      
(完)

补充一下: 网站上的DEMO程序,没有出错后的处理。 我发现在服务器掉线,或WIFI 路由断掉有重新连接后, 模块不会自动重新连接。
                 这时候需要在程序里检测到并处理。

注意的几点:
1   用API写的程序,有时候在开机的时候运行不了, 程序像是死在那一样。 
   用上一次的版本也不能回复正常。  这是我碰到的很奇怪的一个事情。 
   解决的方法 : 烧写了AT指令的程序,测试正常后,然后再烧写API的程序,才可以正常。。。。。说了也不一定有人相信。
2  ESP8266 对电源很挑剔。需要电压很纯净。

文章评论2条评论)

登录后参与讨论

10378119 2018-6-29 09:11

之前接觸8266也是跌跌撞撞
要用標準SDK入門真的是繞來繞去


也是花了一些時間才搞懂

qwqr3231 2018-6-25 08:15

马克一下
相关推荐阅读
esad0 2024-12-04 11:20
基于TOF微型多区激光传感器在MCU上的AI手势识别
TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳...
esad0 2024-09-05 09:06
训练集loss下降,但是验证集loss上升
当训练集loss下降而验证集loss上升时,这通常表明模型可能出现了过拟合。‌这种情况意味着模型在训练数据上的表现优于在测试数据上的表现,即模型很好地拟合了训练数据,但对于新数据的预测能力较差。分析种...
esad0 2023-05-27 08:41
吃饱闲的玩 做的
...
esad0 2021-07-09 15:46
传说中的嘉立创紫和TMF8801测距模块
这个色彩鲜艳的PCB 就是刚推出的嘉立创紫, 我感觉有点偏黑。    激光测距传感器 TMF8801的测试板。TMF8801 的资料还需要给老外签订保密合同才可以...
esad0 2021-04-19 15:38
AIR724 一拖8 LORA 系统
         AIR724通过LORA模块  和其他的8个模块进行通讯。  从而实现1拖8的效果。  &n...
我要评论
2
14
关闭 站长推荐上一条 /2 下一条