(一)串口打印输出乱码的情况:
情况1:串口波特率不匹配
错误描述:
platformIO的串口监视器默认波特率是9600,8-N-1模式。
如果设备打印串口的默认波特率与此不符,便会产生乱码。
解决方法:
在项目根目录下的该文件中,设置串口监视器的波特率:
最下方一行即为监视器波特率。同时,在程序中,设置Arduino的串口输出函数的波特率同为9600:
如此即可。值得一提的是,通过这样的操作,串口信息打印的波特率,便可以跟通过串口烧录程序时使用的波特率、该板子预设中默认配置的波特率解开关系。可以在每个项目中如此显式指定,以防万一。
情况2:字符集设置问题
错误描述:
platformIO的串口监视器的默认字符集是UTF-8。有些时候它跟单片机打印串口时所用的字符集不匹配,也会导致乱码。
解决方法:
在platformio.ini文件中设置串口监视器字段,如下:
比如在此即设置编码规则为gb2312。
可通过以下文档查阅platformIO支持的监视器字符集:
点击查看
以及以下连接查看官方相关说明文档:
docs.platformio.org
情况3:VSCODE文本查看编码设置异常
错误描述:
VSCODE界面右下角,设置了其界面字符查看的编码设置。该编码如果有误亦会显示乱码。且是代码编辑窗内也可能会显式乱码。
解决方法:
点击按提示改之即可。
(二)一种串口打印无输出的情况:
错误描述:
这种情况是由ESPIDF项目迁移过来的时候导致的。ESPIDF中习惯使用ESP_LOGI()之类的宏打印信息,但是这些宏在转到arduino框架之后都会被置换为一个什么都不做的 do{}while(0)函数。
解决方法:
在arduino框架下自然可以使用其Serial系列打印函数。
(三)最后还有一种难以消除的乱码的情况:
我的开发板是一个esp-wroom-32的民间板子。它在开机之后便会输出乱码如下:
这种乱码只在重新上电时触发,其不影响用户正常串口打印输出;并且这种乱码只出现在重新上电时;其长短会随着波特率的增加而增加(图中是9600时的两次上电乱码的长度,460800的时候会延伸至整整三行);并且每次上电乱码内容不同,随机变换。推测是芯片重新上电时的信号干扰所致。
尝试过在一开始单片机内软件禁用串口输出,但这方法无效。故而佐证应是线路扰动。
解决方法是换板子——以及——忍一忍。