在线时间234 小时
UID3301905
注册时间2017-1-8
NXP金币80
TA的每日心情 | 开心 2018-4-20 15:04 |
---|
签到天数: 8 天 [LV.3]偶尔看看II
金牌会员
- 积分
- 2921
- 最后登录
- 2023-7-24
|
本帖最后由 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热点,没有密码:
在此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悬空:
然后改一下之前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);
}
}
看看手机端的网页:
看看效果:
工程文件:
工程.zip
(1.24 MB, 下载次数: 6)
|
|