01

写在前面;

上篇关于如何在内置仅1M的Esp8285做到 OTA 升级的同步到微信公众号,竟然被安信可的某些运维人员看到了,想要转载,我很欣慰,竟然自己的笔记可以被这么大型的公司员工认可!

我是一个非常热爱学习的程序员,单单是乐鑫的 esp8266esp32 我个人花钱买的开发板都忘记有多少个了,而且还玩安信可的 A9g,或者是 ble mesh 模块,下面晒晒我的最近的开发板,我是每天带着他们上下班的,有时候还带回宿舍开发;

写完这差不多50篇关于 esp8266的文章,我发现我沉迷挚爱 esp8266了,因为我2017年当初毕业的时候对计算机网络也是一概不通,对于 Wi-Fi 网络协议不知从何学起,其实 Wi-Fi 网络协议我觉得是最简单的,不用担心 OSI七层模型与 TCP/IP五层模型的关系(这是我后面恶补的),绝对目前大多数应用是应用层开发,就是我们常说的 TcpudpMqttlora 等协议,当你接触最近兴起的 BleMesh 或者 天猫精灵蓝牙直连的 Sigmesh协议之后,你才发现是多么难学!!

之前说过的乐鑫esp32做蓝牙耳机或者官网的 esp-adf 框架一些 demo ,我后面会陆陆续续地开源出来,当然了,我不是说自己多牛逼,我也是借鉴前辈技术,站在巨人肩膀上领域学习!只是有这么一颗心,助国内物联网蓬勃发展贡献自己一份努力!

说了这么多,我希望大家多多支持我,让我有一颗继续学习分享给大家技术的心为之奋斗不止!!


上电后串口打印数据不能取消;


esp8266从最早设计的 SDK 版本开始,上电开机打印都是不可取消的,这是乐鑫官网当初设计的,我觉得这个是蛮合理的,至少我们从串口打印知道上电后设备的一些情况,比如电压电流不够?上次软件或硬件看门狗复位?还是非法指针导致?

当然也有不合理的情况,就是在我们正常串口通讯时候,上电开机总是伴有乱码,不友好的表现。

我们知道,只要我们的数据发现乱码,我们立即就会调串口工具的波特率到 74880 ,您知道这个数字为何这么特别么?因为他是和模块的晶振有关,毕竟我们最最常用的 安信可 esp8266 模块都是基于 26Mhz的晶振,所以是 74880 ,下面是官网抠出来的默认波特率和晶振大小关系表,当您的晶振变了,默认波特率记得查询这个!

上电后的打印数据的详细分析;


以下信息由乐鑫官网人员乐呵乐呵的CSDN博客参考:

ESP8266 上电时打印的 boot 模式信息代表什么?如何改变 boot 模式?

ESP8266 上电时会判断 boot strapping 管脚的状态,并决定 boot 模式。例如,ESP8266 上电时打印的 boot 模式信息如下:

ets Jan 8 2013,rst cause:1, boot mode:(3,2)

其中打印的 boot mode 的第一位数字(3)代表当前的 boot 模式。     Boot 模式由 strapping 管脚的 3 位值 [GPIO15,GPIO0,GPIO2] 共同决定。如下表所示:

烧写失败定位?

确保 boot 模式在 UART boot.

将 ESP8266 拨到烧写模式,看烧写口的 log(默认 74880 查看). 正常烧写应该是 boot mode:(1,n), 其中n任意,第二个参数和 SDIO 相关,不用关心!

看 log 乱码/无打印定位,确保 boot 模式在 Flash boot!

将 ESP8266 拨到运行模式,看 log 口的输出. 正常log应该是 boot mode:(3,n),第二个参数和 SDIO 相关,不用关心!

  • 1.确保波特率正确

  • 2.确保无串口占用

3.1

判断是什么原因重启设备?

我觉得这个最大的用处就是可以判断上次死机或其他原因重启的原因,我上个公司开发的灯具无缘无故亮了起来,于是乎我加了这个,就可以知道是否用户控制电源开关导致硬件重启,还是软件异常导致,如果是软件异常导致则继续执行上次的灯的状态(比如是关灯,然而软件异常导致重启竟然开灯!半夜吓得客户投诉!!)但是有了这个判断之后,就是只要是软件重启之后都是关灯啦!


这个代码可以判断是否软件复位或者硬件复位,或者判断是否正常重启(包括看门狗复位、非法指针);

适合 3.0SDK 以下:

struct rst_info *rtc_info = system_get_rst_info();

printf( "reset reason: %x\n", rtc_info->reason);

if (rtc_info->reason == REASON_WDT_RST ||

rtc_info->reason == REASON_EXCEPTION_RST ||

rtc_info->reason == REASON_SOFT_WDT_RST){

if (rtc_info->reason == REASON_EXCEPTION_RST)

{

GIZWITS_LOG("Fatal exception (%d):\n", rtc_info->exccause);

}

printf( "epc1=0x%08x, epc2=0x%08x, epc3=0x%08x, excvaddr=0x%08x, depc=0x%08x\n",

rtc_info->epc1, rtc_info->epc2, rtc_info->epc3, rtc_info->excvaddr, rtc_info->depc);

}

适合 rtos 3.0 idf 的思路:

通过调用 esp_reset_reason();的返回值判断,我也草草人工翻译了下,毕竟有些我也是不常用:

/**

* @brief Reset reasons

*/

typedef enum {

ESP_RST_UNKNOWN = 0, //!< Reset reason can not be determined

ESP_RST_POWERON, //!< Reset due to power-on event 电源复位

ESP_RST_EXT, //!< Reset by external pin (not applicable for ESP8266)

ESP_RST_SW, //!< Software reset via esp_restart 代码调用esp_restart()方法复位

ESP_RST_PANIC, //!< Software reset due to exception/panic 代码异常

ESP_RST_INT_WDT, //!< Reset (software or hardware) due to interrupt watchdog 软件或硬件中断异常导致看门狗

ESP_RST_TASK_WDT, //!< Reset due to task watchdog 任务超时导致看门狗复位

ESP_RST_WDT, //!< Reset due to other watchdogs 其他看门狗

ESP_RST_DEEPSLEEP, //!< Reset after exiting deep sleep mode 睡眠模式唤醒导致

ESP_RST_BROWNOUT, //!< Brownout reset (software or hardware)

ESP_RST_SDIO, //!< Reset over SDIO

} esp_reset_reason_t;



01

串口通信时候如何做到上电后不乱吗打印?


上面不是说了 上电后必然乱码打印 吗?这下怎么又说了如何做到上电后不乱码打印?嗯,是的,我是做到了!不过,我是现在的管脚和原本的通讯管脚通过交换了管脚,但是原本的通讯管脚依然是乱码打印的哈!

2 个 UART 接⼝的数据传输均由硬件实现。数据传输速度可达 115200*40(4.5Mbps)UART0 可以⽤做通信接⼝,⽀持流控。由于 UART1 ⽬前只有数据传输功能,所以⼀般⽤作打印 log。

esp8266有2组串口,下面表所示:


为了不影响上电后串口通讯,上电期间将 U0TXD、U0RXD 分别与 U0RTS (MTDO),U0CTS(MTCK) 交换,以屏蔽打印。 下面就是教程,如何交换!!


因为最近是做 rtos3.0 版本的项目,所以这只研究 rtos3.0 版本的!只教大家如何在 rtos3.0 版本代码实现:

4.1

方法1

直接调用 uart_enable_swap(); 即可:比如下面代码:

#define BUF_SIZE (1024)

static void echo_task()

{

uart_enable_swap(); //交换

uart_config_t uart_config = {

.baud_rate = 9600,

.data_bits = UART_DATA_8_BITS,

.parity = UART_PARITY_DISABLE,

.stop_bits = UART_STOP_BITS_1,

.flow_ctrl = UART_HW_FLOWCTRL_DISABLE};

uart_param_config(UART_NUM_0, &uart_config);

uart_driver_install(UART_NUM_0, BUF_SIZE * 2, 0, 0, NULL);

// Configure a temporary buffer for the incoming data

uint8_t *data = (uint8_t *) malloc(BUF_SIZE);

while (1) {

// 读取数据

int len = uart_read_bytes(UART_NUM_0, data, BUF_SIZE, 20 / portTICK_RATE_MS);

if (!len)

continue;

// Write data back to the UART

uart_write_bytes(UART_NUM_0, (const char *) data, len);

}

}

4.2

方法2

通过在 make menuconfig 配置 ,首先我们必须要串口一(GPIO2)打印日志,但是串口0用作串口通讯!

----> component config

----> ESP8266-specific

----> [*] swap Uart0 I/O pins



4.3

交换之后的接线图;

既然提到了用 GPIO13和GPIO15做通信管脚,那么接线如下:


本人作品

我是一名热爱分享的全栈程序员,熟悉Android 、前端JavaScript微信小程序、php服务器开发以及嵌入式智能硬件编程。

   作为一个 esp8266 开发老司机的我,做过很多 esp8266的项目,比较商业化的有接入阿里智能生活平台、天猫精灵linkkitapp、苏宁智能平台以及京东微联智能平台,以及做过一些小项目esp8266 驱动红外线、七彩灯以及一些数码管,个人觉得,对esp8266 开发颇有一番见解。所以,本微信公众号输入“8266文档”获取我平时汇总的最最常见的开发问题,帮助大家跳过开发这款芯片的那些坑!

也在GitHub开源了esp8266、esp32、微信小程序控制硬件、服务器airkiss配网等物联网代码工程,欢迎 star !助国内物联网发展一臂之力!

Email: xuhongv@yeah.net

GitHub: https://github.com/xuhongv

CSDN: http://blog.csdn.net/xh870189248

长按关注,干货推送!

您的打赏,是我不断创作的动力!

android 串口开发_详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印...相关推荐

  1. esp8266 蓝牙耳机_详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印...

    01写在前面: 上篇关于如何在内置仅1M的Esp8285做到 OTA 升级的同步到微信公众号,竟然被安信可的某些运维人员看到了,想要转载,我很欣慰,竟然自己的笔记可以被这么大型的公司员工认可! 我是一 ...

  2. 乐鑫esp8266学习rtos3.0笔记第11篇:详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  3. 【Unity】动作游戏开发实战详细分析-24-流血喷溅程序

    [Unity]动作游戏开发实战详细分析-24-流血喷溅程序 溅落血迹效果 实现思路 利用对象池的代码设计思路,通过随机性来实现随机的溅落血迹效果. 代码 public class DripBloodF ...

  4. 【Unity】动作游戏开发实战详细分析-07-连续技与组合技功能设计

    [Unity]动作游戏开发实战详细分析-07-连续技与组合技功能设计 基本思路 在一些动作游戏中,存在着连续技这一功能,具体来说就是连续按下规定的按键会触发能力的功能,或者是长按触发等等. 实现解析 ...

  5. 【Unity】动作游戏开发实战详细分析-16-敌人AI设计

    [Unity]动作游戏开发实战详细分析-16-敌人AI设计 基本思想 本文来实现简单的敌人AI,使用协程来开发AI.如果想要使用行为树插件可自行学习使用. 代码实现 敌人的目标信息结构 用于存储所有的 ...

  6. 【Unity】动作游戏开发实战详细分析-06-技能系统设计

    [Unity]动作游戏开发实战详细分析-06-技能系统设计 基本思想 不同的技能可以设计为技能模版,当角色释放技能时,会通过模版ID将它进行实例化,这个实例技能类可以是一个挂载的MonoBehavio ...

  7. 【Unity】动作游戏开发实战详细分析-25-角色残影效果的实现

    [Unity]动作游戏开发实战详细分析-25-角色残影效果的实现 基本思路 Unity中的蒙皮网格组件提供了一个接口BakeMesh,允许我们拿到当前动画帧的网格数据,借此可对烘焙网格使用半透明的边缘 ...

  8. 【Unity】动作游戏开发实战详细分析-15-可扩展的战斗系统

    [Unity]动作游戏开发实战详细分析-15-可扩展的战斗系统 系统设计 攻击信息传递 通常情况下,伤害.属性.判定都会被封装到类中,在触发动画事件后将战斗信息发送给受击者. 我们可以结合Unity碰 ...

  9. Android 音频开发(四) 如何播放一帧音频数据下

    再看这一篇文章前,如果你是小白,我建议你先看一下Android 音频开发(一) 基础入门篇这一篇.今天继续讲解如何通过Android SDK自带API实现播放一帧音频数据. 我们都知道,Android ...

最新文章

  1. Python通过future处理并发
  2. ASP.NET中IP地址,当前用户的方法属性大整合- -
  3. linux 的ip 设置lo_Linux服务器设置静态IP的方法
  4. 11月12号 用户登录输入密码错误达到指定次数后,锁定账户 004
  5. python中的def语句输出1000以内的回文_各种方法测试回文的性能[Python]
  6. QToolButton设置图片填充满_韩国高人气图片素材大合集!每张图,都是桌面壁纸,逼格满满...
  7. HTML5+CSS3实现的响应式垂直时间轴
  8. 通过人脸测试心率和呼吸率
  9. mysql having关键字可以对group by后的结果再进行筛选
  10. Bootstrap FileInput.js + springmvc uploadFile
  11. ubuntu16.04卸载火狐,Amazon
  12. matlab幅度归一化,matlab归一化方法
  13. 中国象棋游戏设计与实现
  14. 【预测模型】基于灰狼算法优化最小二乘支持向量机实现数据分类matlab代码​
  15. 应届生计算机工程师岗位初试
  16. 山东农业大学计算机复试,山东农业大学复试录取分数线
  17. 在网上打印双面和单面的资料哪里打印价格便宜
  18. Skype for Business Client 2016 聊天记录存放公共邮箱
  19. Linux服务器内存消耗过高解决方法
  20. 关于C语言网络编程(Linux)的初学习。

热门文章

  1. php实现支付宝支付接口,PHP实现个人支付宝支付开发(二)
  2. 1载波把32个信道按_「防疫」截至8月27日,单日确诊新增32例,张文宏带来1个坏消息...
  3. python contains_Python中有判断字符串包含(contains)子串的方法吗?
  4. 你不知道的事---SringCloud的feign的继承特性
  5. Java常用的设计模式总结
  6. RabbitMQ的四种交换机
  7. php管理员登录文件,使用PHP文件重置管理员密码(Drupal 8)
  8. java最最长的错误,Java开发中遇到最多的异常是什么?最后一个最多最难!
  9. JAVA8常量池监控_深入探索Java常量池
  10. 炒股Java_基于java计算买卖股票的最佳时机