在本文中将介绍标准板和增强板之间使用UART进行串口通信,加强大家对于串口通信的理解。
一、工具原料
电脑,windows系统
零知标准板+零知增强板
micro-usb线
2条跳线
二、硬件连接
零知标准板
零知增强板
RX1
TX3
TX1
RX3
引脚图连线如下:
三、代码编写
打开零知开发工具软件,并新建一个项目,名字为:开发板串口通信_标准板,然后编写如下代码:
String on = "on";
String off = "off";
String blink = "blink";
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
pinMode(LED_BUILTIN,OUTPUT);
}
void loop() {
//标准板
//发送数据
if(Serial.available()>0){
String comdata = "";
delay(100);
//获取串口调试助手发送的数据
while(Serial.available()>0){
comdata += char(Serial.read());
delay(2);
}
//Serial1发送数据
Serial1.write(comdata.c_str());
}
//获取数据
if(Serial1.available()>0)
{
String rec = "";
delay(100);
//获取增强板发送的数据
while(Serial1.available()>0){
rec += char(Serial1.read());
delay(2);
}
Serial.println("从增强板得到数据:"+rec);
if(on.equals(rec)){
Serial.println("LED ON");
digitalWrite(LED_BUILTIN,HIGH);
}
if(off.equals(rec)){
Serial.println("LED OFF");
digitalWrite(LED_BUILTIN,LOW);
}
if(blink.equals(rec)){
Serial.println("LED BLINK");
led_blink(3);
}
}
}
void led_blink(int s){
for(int i=0;i<s;i++){
digitalWrite(LED_BUILTIN,LOW);
delay(300);
digitalWrite(LED_BUILTIN,HIGH);
delay(300);
}
}
接下来还要增强板的工程,增强板的多串口使用需要 在工程项目文件夹的build_opt.h 文件中定义,可以将零知开源软件增强板的 多串口示例 工程另存为 开发板串口通信_增强板,然后再进行修改,增强板代码如下:
/*
* 使用多个串口示例
* 为了减小代码体积,要使用Serial2,Serial3... 需要在本项目文件夹下的build_opt.h 文件中定义,Serial1和Serial相同;
* 注意:如果build_opt.h文件内容改变后编译出错,请清除库目录下obj_temp文件夹下的缓存文件,再重新编译
-DENABLE_HWSERIAL2
-DENABLE_HWSERIAL3
-DENABLE_HWSERIAL4
-DENABLE_HWSERIAL5
-DENABLE_HWSERIAL6
*/
String on = "on";
String off = "off";
String blink = "blink";
void setup() {
Serial.begin(9600);
Serial3.begin(9600);
pinMode(LED_BUILTIN,OUTPUT);
}
void loop() {
//发送数据
if(Serial.available()>0){
String comdata = "";
delay(100);
//获取串口助手发送的命令
while(Serial.available()>0){
comdata += char(Serial.read());
delay(2);
}
//Serial3发送
Serial3.write(comdata.c_str());
}
//读取数据
if(Serial3.available()>0){
String rec = "";
delay(100);
//获取标准版发送过来的数据
while(Serial3.available()>0){
rec += char(Serial3.read());
delay(2);
}
Serial.println("接收到标准版数据:"+rec);
//执行对应LED的命令
if(on.equals(rec)){
Serial.println("LED ON");
digitalWrite(LED_BUILTIN,HIGH);
}
if(off.equals(rec)){
Serial.println("LED OFF");
digitalWrite(LED_BUILTIN,LOW);
}
if(blink.equals(rec)){
Serial.println("LED BLINK");
led_blink(3);
}
}
}
void led_blink(int s){
for(int i=0;i<s;i++){
digitalWrite(LED_BUILTIN,LOW);
delay(300);
digitalWrite(LED_BUILTIN,HIGH);
delay(300);
}
}
四、结果
接下来打开两个 零知工具箱 进行串口发送数据,可以看到两个零知板之间可以互相发送消息,如果发送 on ,另一个板子的LED灯会被点亮,off则关闭,blink则闪烁