前景乱入:网上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"断开",标签是我放单片机传过来的数据,名称我改成了"标签_原始数据",即单片机发过来的东西有哪些

图1-1 E4A布局
图1-2 部件名称

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手机显示效果图

图2-手机接收信号
上图图3是E4A生成的apk,然后手机连ESP8266发出的WiFi,中间的蓝色标签就是我的单片机传给手机的数据

手机串口调试图

图3 安信可串口通信
上图是安信可串口调试,手机接收的数据显示(信号好难连上,但是直观,辅助测试写的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官网不能直接打开的,需要注意一下

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐