【零知开源】标准板与增强板的串口通信示例

在本文中将介绍标准板和增强板之间使用UART进行串口通信,加强大家对于串口通信的理解。
一、工具原料

二、硬件连接
       零知标准板                零知增强板
       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则闪烁