查看: 2265|回复: 1

【RT1052】开发板通过8266服务器向客户端发送数据

[复制链接]
  • TA的每日心情
    开心
    2018-4-20 15:04
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2952
    最后登录
    2023-7-24
    发表于 2018-12-2 23:59:08 | 显示全部楼层 |阅读模式
    【RT1052】开发板通过8266服务器向客户端发送数据


        之前做的DEMO都是手机端发送数据到8266服务器再发送到开发板以实现手机控制开发板,本帖做另一个方向的DEMO即开发板通过8266服务器向手机网页客户端发送数据,发送的数据多样化,凡是从开发板端获取或计算出来的数据,均可发送至手机网页客户端,本DEMO以开发板的RX8010芯片为基础,发送日期和时间数据,发送的数据格式和协议可自定义,只需要协调开发板LPUART2串口发送的数据格式和8266串口接收的数据格式,让两者成功握手即可,常见方法为加入起始字节或结束字节,由于8266端也带有串口空闲判断,也可接收不定长数据,因此不需要加入结束字节。
        在上帖网页服务器基础上添加四个标签即可,用于显示温度、湿度、日期和时间,在本DEMO中不使用DHT11而只使用RX8010,因此温湿度数据为预设的11℃,22%:
    Screenshot_20181203-000140.jpg
        网页服务器代码如下:
    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 +=  "<html>";
      str +=  "<head><title>";
      str += str_title;
      str +=  "</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" /></head>";
      str +=  "<body style=\"background-coloraleGoldenRod\">";
      str +=  "<form method=\"get\">";

      str +=  "<p><font size=\"30px\">";
      str +=  str_radio1_title;
      str +=  "</font>";

      if(radio1_flag)
      {
      str +=  "<input type=\"radio\" style=\"width:60px; height:60px; \" name=\"radio1\" value=\"0\" >";
      str +=  "<font size=\"30px\">";  
      str += str_radio1_1;
      str +=  "</font>";

      str +=  "<input type=\"radio\" style=\"width:60px; height:60px; \" name=\"radio1\" value=\"1\" checked >";
      str +=  "<font size=\"30px\">";

      str += str_radio1_2;
      str +=  "</font></p>";
      }
      else
      {
      str +=  "<input type=\"radio\" style=\"width:60px; height:60px; \" name=\"radio1\" value=\"0\" checked >";
      str +=  "<font size=\"30px\">";  
      str += str_radio1_1;
      str +=  "</font>";

      str +=  "<input type=\"radio\" style=\"width:60px; height:60px; \" name=\"radio1\" value=\"1\" >";
      str +=  "<font size=\"30px\">";

      str += str_radio1_2;
      str +=  "</p><br>";
      }
      str +=  "<font size=\"30px\" >";
      str +=  str_input1;
      str +=  "<br><input type=\"text\" style=\"width:700px; height:80px; font-size:60px;\" name=\"input_text1\" oninput=

    \"value=value.replace(/[\\u4E00-\\u9FA5]/g,'')\" ><br>";

      str +=  "<br><input type=\"button\" value=\"";
      str +=  str_submit;
      str +=  " \"style=\" width:200px; height:80px; font-size:60px; \" name=\"button1_set\" onclick=\"submit();\"><br>";

      str +=  "<br><font size=\"30px\">";  
      str += str_temp_title;
      str += str_temp;
      str += str_temp_sym;
      str +=  "</font><br>";

      str +=  "<font size=\"30px\">";  
      str += str_humi_title;
      str += str_humi;
      str +=  "</font><br>";

      str +=  "<font size=\"30px\">";  
      str += str_date_title;
      str += str_date;
      str +=  "</font><br>";

      str +=  "<font size=\"30px\">";  
      str += str_time_title;
      str += str_time ;
      str +=  "</font><br>";

      str += "</form></body></html>";

      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 Screenshot_20181203-000717.jpg
    上传工程文件:
    工程文件.zip (1.24 MB, 下载次数: 6)
    今天心情不错
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92616
    最后登录
    2024-4-22
    发表于 2018-12-4 19:39:51 | 显示全部楼层
    支持一下
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 06:45 , Processed in 0.120972 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表