请选择 进入手机版 | 继续访问电脑版
查看: 1448|回复: 1

【飞凌RT1052】连接8266本地网页服务器控制继电器灯光

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

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2921
    最后登录
    2023-7-24
    发表于 2018-12-1 17:17:22 | 显示全部楼层 |阅读模式
    本帖最后由 donatello1996 于 2018-12-1 18:35 编辑

        在之前的实验中我调通了板上的LPUART2外设,现在可以拿来驱动8266WIFI模块了。
        这章的重点放在8266和飞凌RT1052板上LPUART2的通信,先讲8266。8266是一个WIFI的主控芯片,硬件方面引出了SPI UART等串行接口,软件方面,既可以直接透传TCP数据,也可以加载HTTP协议和HTML流,进行网页服务器或客户端的开发。首先我们可以在电脑端搭建一个非常简单的网页,只有一个单选框:


    html代码如下,不懂的话先学学前端的基础知识:
    <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>

    </font></p>

    </form>
    </body>

    </html>

    这是之后8266要加载的网页,先保存起来,我们要做别的事情,是搭建8266的TCP服务器,以下代码如无特殊补充,均为要写入到8266程序的代码:


    ESP8266WebServer server(80);


    const char* ssid     = "donatello";


    IPAddress local_IP(192, 168, 1, 3);
    IPAddress gateway (192, 168, 1, 1);
    IPAddress subnet  (255, 255, 255, 0);
    WiFi.mode(WIFI_AP);
    WiFi.softAPConfig(local_IP,gateway,subnet);
    WiFi.softAP(ssid);
    server.begin();
    server.on("/",Main_Page_Handler);


    如代码可见,8266上电启动之后会生成一个ssid为"donatello"的WIFI热点,没有密码:
    Screenshot_20181201-165752.jpg
    在此WIFI局域网内,会新建一个地址为192.168.1.3,端口为80的TCP服务器,我们都知道,端口为80的服务器是要通过浏览器访问的,我们可以通过电脑或者手机的浏览器进行访问。然后将以下代码写入到8266的flash中,这个代码是根据上面的网页代码修改的:


    void Main_Page_Handler()
    {
      char tx_buffer[2];
      tx_buffer[0]=0x01;
      if (server.hasArg("radio1"))
      {
        if (server.arg("radio1")=="0")
        {
          tx_buffer[0]=0x02;
          radio1_flag=0;
        }
        else if(server.arg("radio1")=="1")
        {
          tx_buffer[0]=0x01;
          radio1_flag=1;
        }
      }


      UART_Send(0x01);
      UART_Send(tx_buffer[0]);
      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 +=  "</font></p>";
      }


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


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


    }


    然后再说说8266与飞凌1052的连接,8266的串口连到LPUART2上,EN脚接到GPIO1_30上并赋值高电平,表示使能8266,GPIO0悬空:
    IMG_20181201_171035R.jpg


    然后改一下之前1052板子LPUART2接收不定长数据的代码:
    void LPUART_DMA_Get()
    {
            int i;
            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,1);
                                    SPILCD_DrawString(74,204,"关",0,CYAN,ZF32_NORMAL);
                            }
                            else
                            {


                                    GPIO_PinWrite(GPIO1,30,0);
                                    SPILCD_DrawString(74,204,"开",0,CYAN,ZF32_NORMAL);
                            }
                    }
                    memset(uart2_rx_buffer,0,255);
                    LPUART_ReceiveEDMA(LPUART2,&g_lpuartEdmaHandle,&receiveXfer);


            }
    }


    看看手机端的网页:
    Screenshot_20181201-163018.jpg
    看看效果:
    9.gif
    工程文件:
    工程.zip (1.24 MB, 下载次数: 6)
    今天心情不错
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    107

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    365
    最后登录
    2022-12-14
    发表于 2018-12-3 09:41:04 | 显示全部楼层
    你最后的gif动画图片是怎么制作的?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-3-29 19:16 , Processed in 0.119351 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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