发送端
String msg_esp=String() + String(fengsu[0])+"-" + String(dnegji[0])+"-" + String(MPU_x_y_z[0])+"-" + String(MPU_x_y_z[1])+"-" + String(MPU_x_y_z[2])+"-" + String(alram_speed_dgree[0])+"-" + String(alram_speed_dgree[1])+"-" +";";
接收端
#include <Adafruit_SSD1306.h> Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire); //#include <SoftwareSerial.h> //实例化软串口 //SoftwareSerial mySerial(D2, D1); // RX, TX //分割结果 #define sleng 11 //数组大小 String split_result[sleng];//手动动态调整数组大小,保证数组可以满足容量 /*字符串分割 输入参数 String zifuchuan, 输入字符串 String fengefu, 分隔符号-可以是多个 String result[] 输出结果 */ void Split(String zifuchuan,String fengefu,String result[]) { int weizhi; //找查的位置 String temps;//临时字符串 int i=0; do { weizhi = zifuchuan.indexOf(fengefu);//找到位置 if(weizhi != -1)//如果位置不为空 { temps=zifuchuan.substring(0,weizhi);//打印取第一个字符 zifuchuan = zifuchuan.substring(weizhi+fengefu.length(), zifuchuan.length()); //分隔后只取后面一段内容 以方便后面找查 } else { //上面实在找不到了就把最后的 一个分割值赋值出来以免遗漏 if(zifuchuan.length() > 0) temps=zifuchuan; } result[i++]=temps; //Serial.println(result[i-1]);//在这里执行分割出来的字符下面不然又清空了 temps=""; } while(weizhi >=0); } /* 初始化 */ void setup() { Serial.begin(9600); while (!Serial) { } Serial.println("Goodnight moon!"); //mySerial.begin(9600); // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32 Serial.println(F("SSD1306 allocation failed")); for (;;) ; // Don't proceed, loop forever } display.display(); delay(500); // Pause for 2 seconds display.setTextSize(1); display.setTextColor(WHITE); display.setRotation(0); } /* 主函数 */ void loop() { //接收串口消息mySerial if (Serial.available()){ String split_input =Serial.readStringUntil(';'); //Serial.println(split_input); //分割解析 Split(split_input,"-",split_result);//分割调用 Serial.println("--------new data--------"); //打印消息 检查是否为空 for(int i=0;i<sleng;i++) { if(split_result[i]!="") { Serial.println(String(i)+"-"+split_result[i]); } else { split_result[i]="0"; } } display.clearDisplay(); display.setCursor(0, 0); display.print("wind speed:"); display.println(split_result[0]); display.print("wind level:"); display.println(split_result[1]); display.print("wind waring:"); display.println(split_result[7]); display.print("angle x:"); display.println(split_result[3]); display.print("angle y:"); display.println(split_result[5]); display.print("angle z:"); display.println(split_result[6]); display.print("angle waring:"); display.println(split_result[8]); display.display(); delay(100); String msg=String("")+"{" +"\"风速(m/s)\":"+String(split_result[0])+"," +"\"风速等级\":"+String(split_result[1])+"," +"\"风速报警\":"+String(split_result[7])+"," +"\"角度X轴\":"+String(split_result[3])+"," +"\"角度Y轴\":"+String(split_result[5])+"," +"\"角度Z轴\":"+String(split_result[6])+"," +"\"角度报警\":"+String(split_result[8])+"," +"}"; Serial.println(msg); } }