51单片机esp8266WIFI通信手机APP(E4A版)
实现单片机传输数据到手机app显示
前景乱入:网上E4A教程搜不到单片机给手机发信号,大都手机控制单片机电灯,找ai问题也没解决,经多日四处求索,最后经过B站易安卓入门教学视频,给我灵感,提醒我去找E4A类库,和ai给的语法对比,再加修改,最终摸索到一个边边
前排提醒:本人属于学过编程,只有C,python基础,对app,网页通通一窍不通,毕业临阵磨枪,自己摸瞎撞南墙,本篇属于零基础入门,大佬可绕行
有几个注意的点,最重要是把esp的波特率改成9600,语句是"AT+UART=9600,8,1,0,0",有的可能不一样,不行多试几个
使用的时候是把esp的rx和tx连单片机的rx,tx,普中5.5的是P30RX,P31TX,不是板子上的URXD,UTXD,用esp的时候要把URXD,UTXD上的锁扣拔了?我后面没拔也能用,就是下程序时候把esp的vcc和gnd拔了就行,rx和tx没拔,URXD,UTXD也没拔也能用,可能每个人不一样,有点玄学
E4A的官方教程个人觉得有点糙,有个E4A论坛也可以看看:https://www.eruyi.cn/forum.php?mod=guide&view=new
还有E4A软件类库可以看看,也有简单使用说明
还有其他的随缘更应该,评论区也可留言,看到就回
E4A获取单片机数据代码
’全局变量(一般不建议使用)
变量 原始数据 为 文本型
变量 临时位置 为 文本型
变量 当前消息 为 文本型
事件 主窗口.创建完毕()
客户1.连接服务器(编辑框1.内容,编辑框2.内容,5000)
标签1.背景颜色=无色
标签5.背景颜色=无色
标签6.背景颜色=无色
标签7.背景颜色=无色
标签_原始数据.内容 = "等待数据..."
结束 事件
事件 按钮1.被单击()
客户1.发送数据(文本到字节("GPIO0=0;","GBK"))
标签1.标题="k1开"
结束 事件
事件 按钮2.被单击()
客户1.发送数据(文本到字节("GPIO0=1;","GBK"))
标签1.标题="k1关"
结束 事件
事件 按钮3.被单击()
客户1.发送数据(文本到字节("GPIO0=2","GBK"))
标签1.标题="k2开"
结束 事件
事件 按钮4.被单击()
客户1.发送数据(文本到字节("GPIO0=3","GBK"))
标签1.标题="k2关"
结束 事件
事件 按钮5.被单击()
客户1.发送数据(文本到字节("GPIO0=4","GBK"))
标签1.标题="k3开"
结束 事件
事件 按钮6.被单击()
客户1.发送数据(文本到字节("GPIO0=5","GBK"))
标签1.标题="k3关"
结束 事件
事件 按钮8.被单击()
客户1.连接服务器(编辑框1.内容,编辑框2.内容,5000)
结束 事件
事件 按钮7.被单击()
结束程序()
结束 事件
事件 按钮9.被单击()
客户1.断开连接()
按钮5.可用=假
按钮8.可用=真
按钮1.可用=假
按钮2.可用=假
按钮3.可用=假
按钮4.可用=假
按钮5.可用=假
按钮7.可用=真
标签7.标题="用户使连接断开"
标签1.标题="遥控不可用"
时钟1.可用=假
时钟1.时钟周期="0"
信息框("提示","用户使连接断开","确定")
结束 事件
事件 客户1.收到数据(数据 为 字节型())
原始数据 = 字节到文本(数据, "GBK")
标签_原始数据.内容 = 原始数据
结束 事件
'下面深灰色单引号后面都不用复制,E4A注释就是单引号开头
'注释的代码说我给ai需求让ai用E4A语法给我写的,语法上还是有问题
'这里给一下我看的B站视频教程,挺多的,我就挑着看了两分钟,根据个人需求决定
'【【易安卓E4A】快速入门基础教程 易锦版】 https://www.bilibili.com/video/BV1Ft411J7D2/?p=2&share_source=copy_web&vd_source=b2d9df0f638c3b6a6c7b3fc6820f993d
'事件 客户1.收到数据(数据 为 字节型())
' ' 接收原始数据
' 原始数据 = 字节到文本(数据, "GBK")
'
'' ' 查找有效数据开始位置
'' 临时位置 = 寻找文本(原始数据, "MCUdata:")
' ' 如果 临时位置 > 0 则
' 如果 原始数据 > 0 则
' '提取完整消息
' '当前消息 = 原始数据
'
' ' 更新显示
' 标签_原始数据.内容 = 原始数据 ' 显示完整字符串
'
'' ' 解析ADC值
'' 临时位置 = 寻找文本(当前消息, "adc=")
'' 如果 临时位置 > 0 则
'' adc值 = 取文本中间(当前消息, 临时位置+4, 3)
'' 标签_ADC值.内容 = "ADC: " + adc值
'' 结束 如果
''
'' ' 解析距离值
'' 临时位置 = 寻找文本(当前消息, "dis=")
'' 如果 临时位置 > 0 则
'' dis值 = 取文本中间(当前消息, 临时位置+4, 3)
'' 标签_距离值.内容 = "距离: " + dis值 + "cm"
'' 结束 如果
' 结束 如果
'结束 事件
事件 客户1.连接完毕(连接结果 为 逻辑型)
判断 连接结果
分支 真
' 信息框("提示","连接成功","确定")
按钮8.可用=假
按钮9.可用=真
按钮1.可用=真
按钮2.可用=真
按钮3.可用=真
按钮4.可用=真
按钮5.可用=真
按钮6.可用=真
按钮7.可用=真
标签7.标题="连接成功"
标签1.标题="遥控可用"
时钟1.可用=真
时钟1.时钟周期="5000"
结束 判断
结束 事件
事件 客户1.连接断开()
时钟1.可用=假
时钟1.时钟周期="0"
结束 事件
事件 时钟1.周期事件()
如果 标签7.标题="连接成功" 则
时钟1.可用=真
时钟1.时钟周期="5000"
客户1.连接服务器(编辑框1.内容,编辑框2.内容,5000)
结束 如果
结束 事件
事件 主窗口.按下某键 (键代码 为 整数型,传址 屏蔽 为 逻辑型)
变量 结果 为 整数型
判断 键代码
分支 返回键
如果 结果 = 0 则
结束程序()
结束 如果
结束 判断
结束 事件
E4A上布局,按钮7"退出",按钮8"连接",按钮9"断开",标签是我放单片机传过来的数据,名称我改成了"标签_原始数据",即单片机发过来的东西有哪些


Keil的数据发送部分代码
u8 adc,dis;
void Uart_Init()
{
SCON=0x50;//方式1
TMOD|=0x20;//定时器1,工作方式2
TH1=TL1=0xFD;//波特率9600
TR1=1;//启动定时器1
REN=1;
EA=1;//总中断允许
}
void Send_Byte(unsigned char dat)//发送单个字符函数
{
SBUF=dat;//发送单个字符dat
while(TI==0);//等待发送完成
TI=0;//清空发送中断请求标志
}
void Send_String(unsigned char *str)//发送任意长度字符串函数
{
while(*str!='\0')//等待字符串结束
{
Send_Byte(*str);//逐个发送字符
str++;
}
}
/********************************************************************
名称:串口发送函数 功能:MCU向无线WIFI模块ESP8266发送数据
********************************************************************/
void Send_Uart(uchar value)
{
ES=0; //关闭串口中断
TI=0; //清发送完毕中断请求标志位
SBUF=value; //发送
while(TI==0); //等待发送完毕
TI=0; //清发送完毕中断请求标志位
ES=1; //允许串口中断
}
/********************************************************************
名称:WIFI模块设置函数 作用: 启动模块,以便可以实现无线接入和控制
********************************************************************/
void ESP8266_Set(uchar *puf) // 数组指针*puf指向字符串数组
{
while(*puf!='\0') //遇到空格跳出循环
{
Send_Uart(*puf); //向WIFI模块发送控制指令。
delay_10us(5);
puf++;
}
delay_10us(5);
Send_Uart('\r'); //回车
delay_10us(5);
Send_Uart('\n');
}
void SendMCUdata(u8 adc_value,u8 Distance)
{
uchar i;
Send_String("AT+CIPSEND=0,40\r\n");
Send_String("MCUdata:");
Send_String("adc=");
Send_Byte(adc_value/100+'0');
Send_Byte(adc_value/10+'0');
Send_Byte(adc_value%10+'0');
Send_String(",dis=");
Send_Byte(Distance/100+'0');
Send_Byte(Distance/10+'0');
Send_Byte(Distance%10+'0');
Send_String("\r\n");
}
void main()
{
Uart_Init(); //波特率发生器
delay_ms(2000);
ESP8266_Set("AT+CWMODE=2"); //设置路由器模式1 station,模式2 AP,模式3 station+AP混合模式
delay_ms(2000);
// ESP8266_Set("AT+RST"); //重新启动wifi模块
// ms_delay(2000);
ESP8266_Set("AT+CWSAP=\"wifi\",\"12345678\",11,4"); //AT+CWSAP="wifi_yuan","123456789",11,4 设置模块SSID:WIFI, PWD:密码 及安全类型加密模式(WPA2-PSK)
delay_ms(2000);
ESP8266_Set("AT+CIPMUX=1"); //开启多连接模式,允许多个各客户端接入
delay_ms(2000);
ESP8266_Set("AT+CIPSERVER=1,5000"); //启动TCP/IP 实现基于网络//控制 ESP8266_Set("AT+CIPSERVER=1,5000");
//上面5000我没改过,不知道改了行不行
delay_ms(2000);
ESP8266_Set("AT+CIPSTO=0");
while(1)
{
.
.
.
//测距,测adc模块函数
//我的adc_value是测光照强度,Distance是测距
//因为我把测的数据放while里赋值给的adc_value,所以我就给了函数传参,如果你们测的数据给的是全局变量,也可以不用传参
//然后把发送函数给到while里是让数据不停更新
SendMCUdata(adc_value,Distance);
}
}
E4A手机显示效果图

上图图3是E4A生成的apk,然后手机连ESP8266发出的WiFi,中间的蓝色标签就是我的单片机传给手机的数据
手机串口调试图

上图是安信可串口调试,手机接收的数据显示(信号好难连上,但是直观,辅助测试写的app有没有问题),下载在安信可官网安信可串口调试app网址:https://docs.ai-thinker.com/tools
或者百度安信可科技,在官网里找(下面贴图在哪找)
本站也有上传的tcp_udp文件,就是下面链接,应该都能用,0积分下载
https://download.csdn.net/download/weixin_73664691/87901109?ops_request_misc=%257B%2522request%255Fid%2522%253A%25220a7327104f91a9dafb25dfc1a6ec3c31%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fdownload.%2522%257D&request_id=0a7327104f91a9dafb25dfc1a6ec3c31&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2downloadfirst_rank_ecpm_v1~rank_v31_ecpm-24-87901109-null-null.269v2control&utm_term=tcp_udp&spm=1018.2226.3001.4451.25







然后基本就这些了,后面尝试把这些字符分开,等做出来之后看会不会继续写
参考网页
以下是一些做WiFi通信的一些参考网址,也供大家参考
[1] 赶路人的星光,本站的,文章标题是ESP8266学习——实验:手机控制51单片机上led亮灭(使用AT指令方式)
https://blog.csdn.net/qq_39470634/article/details/120524207?fromshare=blogdetail&sharetype=blogdetail&sharerId=120524207&sharerefer=PC&sharesource=starry_0106&sharefrom=from_link
[2] esp8266与51单片机通信(看完不会你打我)用手机控制led灯的亮灭这个可以配合B站食用,一开始看纯文字白板还是有点疑惑,但是真写的很好!!!
https://blog.csdn.net/River_and_lake/article/details/121431164?fromshare=blogdetail&sharetype=blogdetail&sharerId=121431164&sharerefer=PC&sharesource=starry_0106&sharefrom=from_link
[3]【【易安卓E4A】快速入门基础教程 易锦版】
[4] ESP-01S烧录及使用,连接本地MQTT服务器,Nodejs连接EMQX 这个感觉好详细
https://blog.csdn.net/qq_45362336/article/details/130612379?fromshare=blogdetail&sharetype=blogdetail&sharerId=130612379&sharerefer=PC&sharesource=starry_0106&sharefrom=from_link
AT固件烧录几个教程和其他相关的教程
[5]ESP-01S使用AT指令连接阿里云(目前阿里云是不让免费用了,朋友说换机智云,因为只有一个手机,网络不方便,又折腾回基本的串口通信)
https://blog.csdn.net/weixin_46323814/article/details/128157350?fromshare=blogdetail&sharetype=blogdetail&sharerId=128157350&sharerefer=PC&sharesource=starry_0106&sharefrom=from_link
[6]ESP8266 (ESP-01S)烧录原厂AT固件(带操作资料)
https://blog.csdn.net/jackcsdnfghdtrjy/article/details/104770612?fromshare=blogdetail&sharetype=blogdetail&sharerId=104770612&sharerefer=PC&sharesource=starry_0106&sharefrom=from_link
[7]手机APP开发之MIT Appinventor详细实战教程(十),标准登陆界面的逻辑设计和数据库的有效使用
https://blog.csdn.net/weixin_42619971/article/details/106314581?fromshare=blogdetail&sharetype=blogdetail&sharerId=106314581&sharerefer=PC&sharesource=starry_0106&sharefrom=from_link
[8]【最新】App Inventor 2 学习平台和AI2伴侣使用
https://blog.csdn.net/zqp2013/article/details/140172776?fromshare=blogdetail&sharetype=blogdetail&sharerId=140172776&sharerefer=PC&sharesource=starry_0106&sharefrom=from_link
之前还准备用MIT Appinventor,但是模块编程看不懂,里面语法还是有点没搞懂,又转战回E4A,起码和C像一些(🥲),还有MIT Appinventor官网不能直接打开的,需要注意一下
更多推荐



所有评论(0)