在线时间234 小时
UID3301905
注册时间2017-1-8
NXP金币109
TA的每日心情 | 开心 2018-4-20 15:04 |
---|
签到天数: 8 天 [LV.3]偶尔看看II
金牌会员
- 积分
- 2950
- 最后登录
- 2023-7-24
|
【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>
截个图看看:
将这个网页代码写入到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码:
然后在串口接收那里写上特定算法,模拟出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);
}
}
看看效果:
上传工程文件:
工程.zip
(1.24 MB, 下载次数: 7)
|
|