查看: 2019|回复: 5

【RT1052】娱乐向——使用8266透传任意长度(不超过最...

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

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2950
    最后登录
    2023-7-24
    发表于 2018-12-2 13:55:36 | 显示全部楼层 |阅读模式
    【RT1052】娱乐向——使用8266透传任意长度(不超过最大规定长度的)的字符串
        上一帖中我介绍了如果用8266传递一些简单的,固定的数据,比如传递一个字节的数据用于控制开发板打开或关闭继电器,这次,我来展示一下如何使用8266+串口不定长接收去接收手机端发来的调试字符串,实现单向透传通信。以后有空我会实现基于8266和飞凌1052开发板的双向透传通信。
        首先我们要新建一个输入框的网页,用于让我们自己输入特定的ASCII字符串。由于是测试用,开发板没有中文字库,所以限制输入框不能输入中文,除了中文以外的任何ASCII码都能输入,也就可以在开发板端解析并显示:

    <html>
    <head>
    <title>飞凌RT1052板子好牛逼</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    </head>

    <body style="background-coloraleGoldenRod">
    <form method="get">

    <p><font size=\"30px\">灯光继电器</font>

    <input type="radio" style="width:30px; height:30px;" name="radio1" value="0" >
    <font size="30px">开启</font>

    <input type="radio" style="width:30px; height:30px;" name="radio1" value="1" checked>
    <font size="30px">关闭</font>

    </p>
    输入调试窗口内容1: <input type="text" name="fname1">
    </form>
    </body>

    </html>

    截个图看看:
    Screenshot_20181202-123812.jpg
    将这个网页代码写入到8266固件中:
    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();
      }

      UART.Send(0x01);
      UART.Send(led_switch);
      UART.Send(input_text1_buffer.length());
      UART.print(input_text1_buffer);
      UART.Send(0x0d);
      UART.Send(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><br><br><br>";

      str += "</form></body></html>";
      server.send(200,"text/html",str);

    }

    即可得到一个有输入框的网页,并且输入框只能输入ASCII码:
    51.jpg

    然后在串口接收那里写上特定算法,模拟出Linux命令行那种一行行滚动刷新的效果,并加上时间戳显示:
    void LPUART_DMA_Get()
    {
            int i;
            char text1_buffer[30];
            if(lpuart2_dma_flag)
            {
                    lpuart2_dma_flag=0;
                    if(uart2_rx_buffer[0]==0x01)
                    {
                            printf("收到8266串口数据\n");
                            if(uart2_rx_buffer[1]==0x01)
                            {
                                    GPIO_PinWrite(GPIO1,30,0);
                                    SPILCD_DrawString(74,204,"开",0,CYAN,ZF32_NORMAL);
                            }
                            else
                            {
                                    GPIO_PinWrite(GPIO1,30,1);
                                    SPILCD_DrawString(74,204,"关",0,CYAN,ZF32_NORMAL);
                            }
                            RX8010_Get_Time();
                            text1_buffer[0]='[';                        
                            text1_buffer[1]=hour/10+'0';
                            text1_buffer[2]=hour%10+'0';                        
                            text1_buffer[3]=':';
                            text1_buffer[4]=min/10+'0';
                            text1_buffer[5]=min%10+'0';                        
                            text1_buffer[6]=':';
                            text1_buffer[7]=sec/10+'0';
                            text1_buffer[8]=sec%10+'0';                        
                            text1_buffer[9]=']';
                            
                            for(i=10;i<uart2_rx_buffer[2]+10;i++)
                                    text1_buffer=uart2_rx_buffer[i-7];

                            text1_buffer='\0';
                            printf("%s\n",text1_buffer);
                            
                            strcpy(temp1[rx_idle_lines],text1_buffer);
          if(rx_idle_lines>=7)
            for(i=0;i<rx_idle_lines;i++)
            {
                                            ELCDIF_RGB_ShowStringLine1632(0,i*32, "                              ",0,CYAN);
                                            ELCDIF_RGB_ShowStringLine1632(0,i*32,temp1,0,CYAN);
              strcpy(temp1,temp1[i+1]);
            }
                                    ELCDIF_RGB_ShowStringLine1632(0,rx_idle_index, "                              ",0,CYAN);
                                    ELCDIF_RGB_ShowStringLine1632(0,rx_idle_index,text1_buffer,0,CYAN);

            //rx_idle_index_over=rx_idle_index;
            rx_idle_index+=32;
            rx_idle_lines++;
            if(rx_idle_index>224)rx_idle_index=224;
            if(rx_idle_lines>7)rx_idle_lines=7;
                    }
                    memset(uart2_rx_buffer,0,255);
                    memset(text1_buffer,0,30);
                    LPUART_ReceiveEDMA(LPUART2,&g_lpuartEdmaHandle,&receiveXfer);

            }
    }

    看看效果:
    10.gif 11.gif IMG_20181202_123945R.jpg IMG_20181202_124143R(1).jpg
    上传工程文件:
    工程.zip (1.24 MB, 下载次数: 7)
    今天心情不错
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    107

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    365
    最后登录
    2022-12-14
    发表于 2018-12-3 10:00:40 | 显示全部楼层
    兄弟,你的gif图是怎么制作的?先拍视频,然后转gif????
    回复 支持 反对

    使用道具 举报

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

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92616
    最后登录
    2024-4-22
    发表于 2018-12-5 11:04:49 | 显示全部楼层
    你这个是把ESP8266配置为了服务器,那么想问一下,esp8266配置为了客户端以后,如何访问网站呢?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-20 15:04
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2950
    最后登录
    2023-7-24
     楼主| 发表于 2018-12-5 11:22:54 | 显示全部楼层
    stm1024 发表于 2018-12-5 11:04
    你这个是把ESP8266配置为了服务器,那么想问一下,esp8266配置为了客户端以后,如何访问网站呢? ...

    通过HTTP协议或者MQTT协议实现
    今天心情不错
    回复 支持 反对

    使用道具 举报

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

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92616
    最后登录
    2024-4-22
    发表于 2018-12-5 11:48:56 | 显示全部楼层
    donatello1996 发表于 2018-12-5 11:22
    通过HTTP协议或者MQTT协议实现

    有木有示例啊?我通过TCP建立连接是OK了,可是POST数据后没有返回数据,不知道是我的数据有问题还是对方的网站没响应
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-20 15:04
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2950
    最后登录
    2023-7-24
     楼主| 发表于 2018-12-5 13:29:18 | 显示全部楼层
    stm1024 发表于 2018-12-5 11:48
    有木有示例啊?我通过TCP建立连接是OK了,可是POST数据后没有返回数据,不知道是我的数据有问题还是对方 ...

    那就不知道你了,我不擅长前端开发
    今天心情不错
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-23 19:25 , Processed in 0.134692 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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