

发送端
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);
}
}
浙公网安备 33010602011771号