【RT1052】开发板通过8266服务器向客户端发送数据
之前做的DEMO都是手机端发送数据到8266服务器再发送到开发板以实现手机控制开发板,本帖做另一个方向的DEMO即开发板通过8266服务器向手机网页客户端发送数据,发送的数据多样化,凡是从开发板端获取或计算出来的数据,均可发送至手机网页客户端,本DEMO以开发板的RX8010芯片为基础,发送日期和时间数据,发送的数据格式和协议可自定义,只需要协调开发板LPUART2串口发送的数据格式和8266串口接收的数据格式,让两者成功握手即可,常见方法为加入起始字节或结束字节,由于8266端也带有串口空闲判断,也可接收不定长数据,因此不需要加入结束字节。
在上帖网页服务器基础上添加四个标签即可,用于显示温度、湿度、日期和时间,在本DEMO中不使用DHT11而只使用RX8010,因此温湿度数据为预设的11℃,22%:
Screenshot_20181203-000140.jpg (194.9 KB, 下载次数: 9)
2018-12-3 00:19 上传
网页服务器代码如下:
void Main_Page_Handler()
{
unsigned char led_switch=0,input_text1_buffer_length;
String input_text1_buffer;
if (server.hasArg("radio1"))
{
if (server.arg("radio1")=="0")
{
led_switch=0x02;
radio1_flag=0;
}
else if(server.arg("radio1")=="1")
{
led_switch=0x01;
radio1_flag=1;
}
}
if (server.hasArg("input_text1"))
{
input_text1_buffer=server.arg("input_text1").c_str();
}
Serial.write(0x01);
Serial.write(led_switch);
Serial.write(input_text1_buffer.length());
Serial.print(input_text1_buffer);
Serial.write(0x0d);
Serial.write(0x0a);
String str;
str += "";
str += "
";str += str_title;
str += "
";str += "
aleGoldenRod\">";
str += "
";str += "
";
str += str_radio1_title;
str += "";
if(radio1_flag)
{
str += "";
str += "";
str += str_radio1_1;
str += "";
str += "";
str += "";
str += str_radio1_2;
str += "
";}
else
{
str += "";
str += "";
str += str_radio1_1;
str += "";
str += "";
str += "";
str += str_radio1_2;
str += "
";
}
str += "";
str += str_input1;
str += "
\"value=value.replace(/[\\u4E00-\\u9FA5]/g,'')\" >
";
str += "
str += str_submit;
str += " \"style=\" width:200px; height:80px; font-size:60px; \" name=\"button1_set\" οnclick=\"submit();\">
";
str += "";
str += str_temp_title;
str += str_temp;
str += str_temp_sym;
str += "
";
str += "";
str += str_humi_title;
str += str_humi;
str += "
";
str += "";
str += str_date_title;
str += str_date;
str += "
";
str += "";
str += str_time_title;
str += str_time ;
str += "
";
str += "
";server.send(200,"text/html",str);
}
8266接收串口数据的判断函数:
String str_temp,str_humi,str_date,str_time;
char char_uart_buff[16];
void loop()
{
String comdata;
server.handleClient();
comdata = "";
while (Serial.available() > 0)
{
comdata += char(Serial.read());
delay(2);
}
if (comdata.length()>0&&comdata[0]==0x01)
{
Serial.println(comdata);
char_uart_buff[0]=comdata[1]/10+'0';
char_uart_buff[1]=comdata[1]%10+'0';
//temp
char_uart_buff[2]=comdata[2]/10+'0';
char_uart_buff[3]=comdata[2]%10+'0';
//humi
char_uart_buff[4]=comdata[3]/10+'0';
char_uart_buff[5]=comdata[3]%10+'0';
//year
char_uart_buff[6]=comdata[4]/10+'0';
char_uart_buff[7]=comdata[4]%10+'0';
//month
char_uart_buff[8]=comdata[5]/10+'0';
char_uart_buff[9]=comdata[5]%10+'0';
//mdate
char_uart_buff[10]=comdata[6]/10+'0';
char_uart_buff[11]=comdata[6]%10+'0';
//hour
char_uart_buff[12]=comdata[7]/10+'0';
char_uart_buff[13]=comdata[7]%10+'0';
//min
char_uart_buff[14]=comdata[8]/10+'0';
char_uart_buff[15]=comdata[8]%10+'0';
//sec
str_temp="";
str_humi="";
str_date="";
str_time="";
str_temp+=char_uart_buff[0];
str_temp+=char_uart_buff[1];
str_humi+=char_uart_buff[2];
str_humi+=char_uart_buff[3];
str_humi+='%';
str_date+=char_uart_buff[4];
str_date+=char_uart_buff[5];
str_date+='-';
str_date+=char_uart_buff[6];
str_date+=char_uart_buff[7];
str_date+='-';
str_date+=char_uart_buff[8];
str_date+=char_uart_buff[9];
str_time+=char_uart_buff[10];
str_time+=char_uart_buff[11];
str_time+=':';
str_time+=char_uart_buff[12];
str_time+=char_uart_buff[13];
str_time+=':';
str_time+=char_uart_buff[14];
str_time+=char_uart_buff[15];
}
}
1052开发板端发送数据的函数:
LPUART2_Send_Char(0x01);
LPUART2_Send_Char(11);
LPUART2_Send_Char(22);
LPUART2_Send_Char(year);
LPUART2_Send_Char(month);
LPUART2_Send_Char(mdate);
LPUART2_Send_Char(hour);
LPUART2_Send_Char(min);
LPUART2_Send_Char(sec);
固定格式,起始字节第0个字节为0x01,第1和第2个字节为温度和湿度,分别为11和22,然后依次是年、月、日、时、分、秒,静态页面如下:
由于8266端只使用了html的get方法,没有加入ajax控件,无法做到自动定时刷新,只能手动刷新显示时间:
12.gif (2.92 MB, 下载次数: 12)
2018-12-3 00:19 上传
Screenshot_20181203-000717.jpg (223.73 KB, 下载次数: 11)
2018-12-3 00:19 上传上传工程文件:
工程文件.zip
(1.24 MB, 下载次数: 6)
2018-12-3 00:19 上传
点击文件名下载附件
下载积分: 威望 1