如何和Arduino控制板进行串口通信通信

## 准备条件 - 一台WIN7以上的的电脑 - 一个USB转TTL模块 - 一个语音识别模块 - 一个Arduino控制板 - 在使用前,用户需要提前掌握语音固件制作、固件烧录等方法;如果该部分仍然没掌握,请先去看相关视频教程。 --- &emsp;&emsp;语音识别模块和Arduino控制板进行串口通信,那就必须事先约定好<span style="color:red">波特率</span>和<span style="color:red">控制协议</span>。假如用语音模块让Arduino控制开关灯,现在咱们针对这个来设计固件。 ## 1.协议设计 - 波特率:波特率<span style="color:red">115200</span>、8位数据位、无奇偶校验、1位停止位 - 开灯指令:0x01<span style="color:red">(16进制,1个字节)</span> - 关灯指令:0x02<span style="color:red">(16进制,1个字节)</span> ## 2.语音固件制作 &emsp;&emsp;在<span style="color:red">Pin脚配置</span>下,<span style="color:green">GPIO_B6</span>配置为<span style="color:red">UART1_RX</span>,选择<span style="color:red">固定格式</span>,则识别的格式为帧头为<span style="color:blue">AA 55</span>,帧尾为<span style="color:blue">55 AA</span>,<span style="color:green">GPIO_B7</span>配置为<span style="color:red">UART1_TX</span>,<span style="color:green">波特率</span>为<span style="color:red">115200</span>,如下图所示: ::: hljs-center ![image.png](https://cos.easydoc.net/97929141/files/lgu5zmnp.png) ::: &emsp;&emsp;在**命令词自定义**的<span style="color:green">基础信息</span>下,添加两个命令词,分别为开灯、关灯,如下图所示: ::: hljs-center ![image.png](https://cos.easydoc.net/97929141/files/li879e9s.png) ::: &emsp;&emsp;在<span style="color:green">控制详情</span>中,为命令词<span style="color:red">开灯</span>添加一个控制,如下图所示: ::: hljs-center ![image.png](https://cos.easydoc.net/97929141/files/li87gif3.png) ::: &emsp;&emsp;为命令词<span style="color:red">关灯</span>添加一个控制,如下图所示: ::: hljs-center ![image.png](https://cos.easydoc.net/97929141/files/li880x5h.png) ::: &emsp;&emsp;上述两个步骤操作完成后,<span style="color:green">控制详情</span>如下图所示: ::: hljs-center ![image.png](https://cos.easydoc.net/97929141/files/li883tkd.png) ::: 待固件在线编程生成后,烧录好固件。 ## 3.编写Arduino测试代码 ```arduino //软串口库 #include <SoftwareSerial.h> //定义软串口,2脚为RXD,3脚为TXD SoftwareSerial mySerial(2, 3); void setup(){ Serial.begin(115200); mySerial.begin(115200); } //语音识别控制模块发送十六进01或者02,Arduino就可以解析该命令 void loop() { char c; //检测软串口是否有数据 if (mySerial.available() > 0) { c = mySerial.read();//读出串数据 Serial.println(c); //从主串口打开出来 if (c == 0x01) { Serial.println("已收到开灯指令"); //在这里,就可以通过GPIO来控制开灯 } else if (c == 0x02) { Serial.println("已收到关灯指令"); //在这里,就可以通过GPIO来控制关灯 } } } ``` ## 4.接线 - 语音识别模块的<span style="color:red">GND</span> 接 Arduino的<span style="color:green">GND</span> - 语音识别模块的<span style="color:red">RXD</span> 接 Arduino的<span style="color:green">TXD</span> - 语音识别模块的<span style="color:red">TXD</span> 接 Arduino的<span style="color:green">RXD</span> - 语音识别模块的<span style="color:red">VCC</span> 接 Arduino的<span style="color:green">+5V</span> --- ## 5.上电测试 &emsp;&emsp;接好线后,检查下接线是否异常,没问题的话,给Arduino控制板供电。待语音识别模块唤醒后,喊命令词<span style="color:red">开灯</span>、<span style="color:red">关灯</span>,监测Arduino串口打印的报文,是否有打印<span style="color:blue">已收到开灯指令</span>、<span style="color:blue">已收到关灯指令</span>,如果收到,则表示通信正常;反之异常,请按照上述流程重新检查下。