http://wiki.tjc1688.com/commands/add.html#add-1
//往s0曲线控件的0通道添加数据30 最大255 2 add s0.id,0,30
add objid,ch,val objid:曲线控件ID序号(此处必须是ID号,不支持使用控件名称),推荐使用s0.id这种形式 ch:曲线控件通道号(范围:0-3) val:数据 (最小0,最大255,还取决于曲线控件的实际高度,例如曲线控件实际高200像素 ,当你添加的值超过200的部分就显示不出来。超过255软件会自动取低8位,即对255取余)
、
串口软件
add 1,0,30\xff\xff\xff
文字设置
首先设置一个字库
然后添加 文本
烧录进去
单片机程序
//#include <SoftwareSerial.h> //SoftwareSerial TJC(8,9); #define TJC Serial2 int a; unsigned long nowtime; void setup() { // put your setup code here, to run once: //初始化串口 Serial.begin(9600); TJC.begin(9600); //因为串口屏开机会发送88 ff ff ff,所以要清空串口缓冲区 while (TJC.read() >= 0); //清空串口缓冲区 TJC.print("page main\xff\xff\xff"); //发送命令让屏幕跳转到main页面 nowtime = millis(); //获取当前已经运行的时间 } /* \xff\xff\xff randset 10,30 n1.val=rand n2.val=rand n3.val=rand n4.val=rand add 1,0,n1.val add 1,1,n2.val add 1,2,n3.val */ // 温度 湿度 烟雾 CO String node1[4]={"23","40","100","200"}; String node2[4]={"23","40","100","200"}; String node3[4]={"23","40","100","200"}; // 刷新控件 void SetValue(String id_,String msg){ //用sprintf来格式化字符串,给n0的val属性赋值 //sprintf(str, "n0.val=%d\xff\xff\xff", a); String show_msg=id_+".txt=\""+ msg+"\"\xff\xff\xff"; char show_msg_c[show_msg.length()+1]; show_msg.toCharArray(show_msg_c,show_msg.length()+ 1); //把字符串发送出去 TJC.print(show_msg_c); // delay(1000); Serial.println(show_msg_c); } // 刷新控件 void DrawPIC(String id_,String chanel,String msg){ // add 1,0,n1.val String show_msg="add "+id_+","+ chanel +","+ msg+"\xff\xff\xff"; char show_msg_c[show_msg.length()+1]; show_msg.toCharArray(show_msg_c,show_msg.length()+ 1); //把字符串发送出去 TJC.print(show_msg_c); // delay(1000); Serial.println(show_msg_c); } void loop() { if (millis() >= nowtime + 1000) { nowtime = millis(); //获取当前已经运行的时间 String msg=String(a); SetValue("t11",msg); SetValue("t12",msg); SetValue("t13",msg); SetValue("t14",msg); SetValue("t21",msg); SetValue("t22",msg); SetValue("t23",msg); SetValue("t24",msg); SetValue("t31",msg); SetValue("t32",msg); SetValue("t33",msg); SetValue("t34",msg); DrawPIC("1","0",msg); DrawPIC("1","1",msg); DrawPIC("1","2",msg); a++; } }
单独例程
#include "Api_SerialOled.h" #define Serial1Zigbee Serial unsigned long nowtime; //分割结果 #define sleng 6 //数组大小 比实际多一个 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); } bool flag_do=0; /* sensor1-12-23-65-65-; sensor2-112-213-615-65-; sensor3-02-31-23-44-; */ String GetData(String sensor,String action){ //if(flag_do==0){flag_do=1;} //else{return "wait";} //String ShowMsg =String()+ "sensor1"+"-"+"getdata"+";"; String ShowMsg =String()+ sensor +"-"+action+"-;"; while(Serial1Zigbee.read() >= 0){}//清空缓存 //转发给单片机处理 Serial1Zigbee.println(ShowMsg); delay(1000); //等待单片机回应消息 String REC_comdata; if (Serial1Zigbee.available()){ REC_comdata =Serial1Zigbee.readStringUntil(';'); //REC_comdata=REC_comdata.replace("\n",""); Serial.print("Rec_arduino:");Serial.println(REC_comdata); //2 ========解析命令 String split_input=REC_comdata; //2-0解析数据 sensor-on Split(split_input,"-",split_result);//分割调用 //2-1打印消息 0-sensor 1-on for(int i=0;i<sleng;i++) { if(split_result[i]!="") { //Serial.println(String(i)+"-"+split_result[i]); } } String sensor_name=split_result[0];// String vlaue_wendu=split_result[1];// String vlaue_shidu=split_result[2];// String vlaue_mq2=split_result[3];// String vlaue_mq9=split_result[4];// if(sensor_name=="sensor1" ){ Serial.println("sensor1"); node1[0]= vlaue_wendu; node1[1]= vlaue_shidu; node1[2]= vlaue_mq2; node1[3]= vlaue_mq9; } else if(sensor_name=="sensor2"){ Serial.println("sensor2"); node2[0]= vlaue_wendu; node2[1]= vlaue_shidu; node2[2]= vlaue_mq2; node2[3]= vlaue_mq9; } else if(sensor_name=="sensor3"){ Serial.println("sensor3"); node3[0]= vlaue_wendu; node3[1]= vlaue_shidu; node3[2]= vlaue_mq2; node3[3]= vlaue_mq9; } REC_comdata="ok"; //flag_do=0; return REC_comdata; } else{ REC_comdata="no"; // flag_do=0; //Serial.print("Rec_arduino:");Serial.println(REC_comdata); return REC_comdata; } } void setup() { // put your setup code here, to run once: //初始化串口 Serial.begin(9600); Serial1Zigbee.begin(9600); TJC.begin(9600); //因为串口屏开机会发送88 ff ff ff,所以要清空串口缓冲区 while (TJC.read() >= 0); //清空串口缓冲区 TJC.print("page main\xff\xff\xff"); //发送命令让屏幕跳转到main页面 nowtime = millis(); //获取当前已经运行的时间 } void loop() { if (millis() >= nowtime + 2000) { nowtime = millis(); //获取当前已经运行的时间 String REC_comdata =GetData("sensor1","getdata"); if (REC_comdata=="ok"){ OELD_showonce_sensor();} REC_comdata =GetData("sensor2","getdata"); if (REC_comdata=="ok"){ OELD_showonce_sensor();} REC_comdata =GetData("sensor3","getdata"); if (REC_comdata=="ok"){ OELD_showonce_sensor();} } }
Api_SerialOled.h
//#include <SoftwareSerial.h> //SoftwareSerial TJC(8,9); #define TJC Serial2 int a; /* \xff\xff\xff randset 10,30 n1.val=rand n2.val=rand n3.val=rand n4.val=rand add 1,0,n1.val add 1,1,n2.val add 1,2,n3.val */ // 温度 湿度 烟雾 CO String node1[4]={"23","40","100","200"}; String node2[4]={"23","40","100","200"}; String node3[4]={"23","40","100","200"}; // 刷新控件 void SetValue(String id_,String msg){ //用sprintf来格式化字符串,给n0的val属性赋值 //sprintf(str, "n0.val=%d\xff\xff\xff", a); String show_msg=id_+".txt=\""+ msg+"\"\xff\xff\xff"; char show_msg_c[show_msg.length()+1]; show_msg.toCharArray(show_msg_c,show_msg.length()+ 1); //把字符串发送出去 TJC.print(show_msg_c); // delay(1000); Serial.println(show_msg_c); } // 刷新控件 void DrawPIC(String id_,String chanel,String msg){ // add 1,0,n1.val String show_msg="add "+id_+","+ chanel +","+ msg+"\xff\xff\xff"; char show_msg_c[show_msg.length()+1]; show_msg.toCharArray(show_msg_c,show_msg.length()+ 1); //把字符串发送出去 TJC.print(show_msg_c); // delay(1000); //Serial.println(show_msg_c); } void OELD_showonce(String msg ){ SetValue("t11",msg); SetValue("t12",msg); SetValue("t13",msg); SetValue("t14",msg); SetValue("t21",msg); SetValue("t22",msg); SetValue("t23",msg); SetValue("t24",msg); SetValue("t31",msg); SetValue("t32",msg); SetValue("t33",msg); SetValue("t34",msg); DrawPIC("1","0",msg); DrawPIC("1","1",msg); DrawPIC("1","2",msg); } void OELD_showonce_sensor( ){ SetValue("t11",node1[0]); SetValue("t12",node1[1]); SetValue("t13",node1[2]); SetValue("t14",node1[3]); SetValue("t21",node2[0]); SetValue("t22",node2[1]); SetValue("t23",node2[2]); SetValue("t24",node2[3]); SetValue("t31",node3[0]); SetValue("t32",node3[1]); SetValue("t33",node3[2]); SetValue("t34",node3[3]); DrawPIC("1","0",node1[0]); DrawPIC("1","1",node2[0]); DrawPIC("1","2",node3[0]); }