利用stm32+app inventor与esp8266通信
利用stm32+app inventor与esp8266通信
- stm32与esp8266通信
- 移动端app制作、生成、控制
本章实验的目的是将手机连接上ESP8266提供的WIFI网络,打开自定义的app连接ESP8266的ip地址及端口号,实现app与ESP8266模块的通信,进而达到app控制32开发板的目的,并将开发板上面的数据返回到app上显示出来。
关于stm32与esp8266之间的通信,在前面的文章中已经介绍得差不多了,本文章主要介绍的是app inventor的制作,然后生成app二维码,最后在手机端下载app,进而实现通过WIFI局域网控制stm32开发板,当然关于stm32与esp8266之间的一些东西也会粗略讲一下。
本章所用到的器件如下:
STM32F103ZET6最小系统板
ESP8266-01S模块
USB转microUSB数据线
四根杜邦线
连接如下:
32板3.3v----------->ESP8266的3.3v
32板GND---------->ESP8266的GND
32板的PA2-------->ESP8266的RX
32板的PA3-------->ESP8266的TX
stm32与esp8266通信
先附上32程序的主代码:
#include "stdio.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "serial.h"
#include "esp8266.h"/* AT指令返回值的结尾没有\r\n这样的回车换行符,* 而在串口调试助手中,需要MCU输出\r\n给串口调试助手才能刷新缓冲区把字符显示出来,* 同时这个\r\n还起到回车换行的目的*//* AT指令的结尾处必须是\r\n*//* serial.h中的usart1_send_usart2函数用于没有USB转TLL模块的人使用,* 此函数作用是利用串口1发送AT指令给串口2,串口2将AT指令发送给ESP8266,实现对ESP8266的AT指令配置,* 当然,如果你有USB转TTL模块的话,可以直接将ESP8266与USB转TTL模块直连,然后在串口调试助手里面直接配置AT指令*/extern u8 esp_sipsend1[];
extern u8 esp_sipsend2[];int main(void)
{ delay_init(); //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200); //串口1初始化为115200Uart2_Init(115200); //串口2初始化为115200LED_Init(); //初始化与LED连接的硬件接口Esp8266_Init();while(1){ usart1_send_usart2(); //利用串口1发送AT指令给串口2,从而达到配置ESP8266的目的,并且让模块的返回值在串口1打印出来if(Data_Compare((u8 *)"LEDK")) //点亮板上的led{ led(1); Clear_Buf();Uart_SendStr(USART1, (u8 *)"led is open\r\n"); Uart_SendStr(USART2, esp_sipsend1); //利用串口2给esp8266发送AT+CIPSEND指令,告诉它下一次将发送具体数据Usart2_Receive_Data(USART1); //将串口2接收到的AT+CIPSEND指令返回的数据显示在串口1上Uart_SendStr(USART2, (u8 *)"led is open\r\n"); //发送具体数据给esp8266,让他转发到app上}else if(Data_Compare((u8 *)"LEDG")) //关闭板上的led{led(0);Clear_Buf();Uart_SendStr(USART1, (u8 *)"led is close\r\n"); Uart_SendStr(USART2, esp_sipsend2); //利用串口2给esp8266发送AT+CIPSEND指令,告诉它下一次将发送具体数据Usart2_Receive_Data(USART1); //将串口2接收到的AT+CIPSEND指令返回的数据显示在串口1上Uart_SendStr(USART2, (u8 *)"led is close\r\n"); //发送具体数据给esp8266,让他转发到app上 }}
}
此代码中的serial.h包含几个自定义函数,其函数的作用见其右边的注释,代码如下所示:
#ifndef __SERIAL_H
#define __SERIAL_H
#include "stdio.h"
#include "sys.h"
#include "delay.h"
#include "string.h"
#include "usart.h"#define tbuf 100void Uart2_Init(u32 bound); //初始化串口2
void Clear_Buf(void); //清除缓冲区数据
void Uart_SendStr(USART_TypeDef* USARTx, u8 *s); //往某一个串口发送指定字符串
void Usart2_Receive_Data(USART_TypeDef* USARTx); //将串口2返回的数据发送给串口1进行显示
u8 Data_Compare(u8 *p); //指定字符串与缓存数组数据进行数据比较
void usart1_send_usart2(void); //利用串口1发送AT指令给串口2,从而达到配置ESP8266的目的,并且让模块的返回值在串口1打印出来#endif
其中Usart2_Receive_Data函数是用于接收esp8266返回的数据并在串口1进行显示,因为串口2是与esp8266进行连接的,只要串口2正确发送AT指令给esp8266,esp8266都会返回响应值,由于手头上没有USB转TTL模块,只能用这种方法来观察esp8266模块的返回值。
而usart1_send_usart2函数的作用是利用串口调试助手发送AT指令给串口1,串口1接收到数据之后,将数据通过串口2发送给esp8266模块,达到通过串口调试助手发送AT指令配置esp8266模块的目的,之所以用这种方式,其原因是手头上没有USB转TTL模块,才出此下策。
假如手头上有USB转TTL模块,上面的两个函数大可不必要,直接将USB转TTL直连上esp8266模块,然后USB端插在电脑上,利用串口调试助手即可直接发送AT指令去配置esp8266模块以及显示模块的返回值。
主函数中的Esp8266_Init函数是对esp8266进行一系列的配置,使得能够被app客户端所连接上,其详细代码如下所示:
#include "esp8266.h"u8 esp_at[] = "AT\r\n"; //握手连接指令,返回"OK"
u8 esp_cifsr[] = "AT+CIFSR\r\n"; //本机IP地址查询指令
u8 esp_cipsend[] = "AT+CIPSEND=6\r\n"; //设置发送数据长度
u8 esp_test[] = "sunny\r\n"; //数据内容
u8 esp_rst[] = "AT+RST\r\n"; //软件复位
u8 esp_cwmode[] = "AT+CWMODE=2\r\n"; //设置ESP8266的工作模式2(AP模式,WIFI模块作为热点),返回"OK"或者"no change"
u8 esp_cwsap[] = "AT+CWSAP=\"ESP8266_TEST\",\"1234567890\",1,4\r\n";//设置WIFI的名称、密码、通道号、加密方式(4-WPA_WPA2_PSK)
u8 esp_cipmux[] = "AT+CIPMUX=1\r\n"; //打开多连接
u8 esp_cipserver[] = "AT+CIPSERVER=1,8080\r\n"; //建立TCP服务器,开放端口8080,端口号可以改成其他的例如8086等等
u8 esp_cipsto[] = "AT+CIPSTO=2880\r\n"; //设置服务器超时时间为2880s,也就是连接服务器过程中可以等待的时间extern u8 RX_num; //接收计数变量
extern u8 RX_buffer[tbuf];void Esp8266_Init(void)
{Uart_SendStr(USART2, esp_cwmode); //设置ESP8266的工作模式2 AP,返回"OK"或者"no change"Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示Uart_SendStr(USART1, (u8 *)"\r\nOK,set mode as AP with ESP8266!\r\n----------\r\n");Uart_SendStr(USART2, esp_rst); //设置ESP8266的工作模式后需要复位以生效该模式Usart2_Receive_Data(USART1); //复位后可能会返回一堆乱码Uart_SendStr(USART1, (u8 *)"\r\nOK,set RST success!\r\n----------\r\n");Uart_SendStr(USART2, esp_cwsap); //设置WIFI的名称及密码Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示Uart_SendStr(USART1, (u8 *)"\r\nOK,set cwsap success!\r\n----------\r\n");Uart_SendStr(USART2, esp_cipmux); //设置多连接(多路连接模式)Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示Uart_SendStr(USART1, (u8 *)"\r\nOK,set cipmux success!\r\n----------\r\n");Uart_SendStr(USART2, esp_cipserver); //设置wifi模块为TCP服务器模式,并配置端口为8080Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示Uart_SendStr(USART1, (u8 *)"\r\nOK,set server success!\r\n----------\r\n");Uart_SendStr(USART2, esp_cipsto); //设置服务器超时时间为2880sUsart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示Uart_SendStr(USART1, (u8 *)"\r\nOK,set cipsto success!\r\n----------\r\n");Uart_SendStr(USART2, esp_cifsr); //获取本机IP地址Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示Uart_SendStr(USART1, (u8 *)"\r\nOK,get ip address success!\r\n----------\r\n");
}
至于其中的AT指令,网上随便找一下都有一大堆关于AT指令的详细解释,这里就不再过多解释,而其他的函数,也没有什么好讲的,至此,stm32代码部分就到这里了。
移动端app制作、生成、控制
接着进行app的设计,本章app的设计采用的是app inventor。
APP INVENTOR由谷歌实验室开发,后移交麻省理工学院,是一款可视化编程环境,采用搭积木的方式快速建立应用程序,并且可以结合AI伴侣,极其便利的在手机上进行测试和应用。
APP INVENTOR是完全基于网页的在线编程工具,国内外都有一些可用的服务器。
麻省理工学院的服务器登录地址:http://appinventor.mit.edu/explore/
广州服务器登录地址:http://app.gzjkw.net/login
推荐使用国内的广州服务器。
可以用QQ登录,登录后创建项目就可以进入编程界面。
中间显示的就是手机屏幕,通过拖拽工具到手机屏幕,就可以开始编程了,目前只支持Android手机。
为了便于编程调试可以在手机上安装AI伴侣,下载地址可以通过点击菜单栏 帮助->AI伴侣信息 打开下载帮助页。
通过手机扫描图中二维码即可下载AI伴侣,在程序调试时,在服务器端选择菜单栏 连接->AI伴侣 弹出连接二维码和6位编码,在对应的手机AI伴侣中输入6位编码,或扫描二维码,就可以与服务器建立连接,开始调试程序了,同时只要你的网页端app界面改变,相应的在手机端AI伴侣上的界面也会相应实时更新。
而在此WIFI通信app的设计过程中,需要用到tcp连接插件,也就是一个扩展插件,需要导入到app inventor中才能使用tcp连接到esp8266模块上提供的wifi,此插件的链接如下:app inventor扩展插件
上图中所创建的app界面都是用左边那些基本的控件以及扩展插件,其逻辑设计图如下所示:
此逻辑设计也非常简单,只是利用左边的一些功能块进行拼凑而来的,关于更多详细的app inventor语法,网上搜索也是一大堆,这里就不再过多介绍。至此,app的设计基本完成,之后就要进行app的生成了,点击菜单栏的打包apk->打包apk并显示二维码,此时会生成此app的一个二维码,通过打开手机上的AI伴侣app,然后利用AI伴侣上面的扫描二维码去扫描生成的app二维码,扫描后会自动跳到默认游览器去安装此app,安装并打开此app,通过在新app上面输入ESP8266的ip地址及端口号(ip地址可通过执行esp8266初始化函数时在串口调试助手上面打印出来,而端口号则是前面AT+CIPSERVER=1,8080中的8080端口号),然后进行连接,连接成功后,在发送区域输入:LEDK后点击send!,此时会将字符串“LEDK”发送到ESP8266模块上,模块收到信息后通过串口2返回给MCU,MCU接到数据后与程序中设定的字符串进行比较,如果一致则执行相应的操作指令,并将MCU上的数据返回到app上面显示出来。
附上app inventor制作的app项目链接:app_inventor项目
附上整个stm32项目通信代码链接:stm32+app inventor+esp8266通信代码
代码要的下方留言邮箱我会第一时间发给你们的,有什么问题也可以下面评论!
利用stm32+app inventor与esp8266通信相关推荐
- APP Inventor练习——蓝牙通信
文章目录 前言 一.蓝牙调试 1.组件设计 2.逻辑设计 二.蓝牙对战 1.组件设计 2.逻辑设计 3.效果展示 总结 前言 练习APP Inventor中蓝牙的使用,并为之前的项目APP小游戏--一 ...
- stm32开发板下esp8266通信
前言 Esp8266算是一个傻瓜式的wifi通信模块,前前后后也用过好几次,这次隔了好久没用有些东西都忘了,所在这里记录一下,防止以后用的时候又忘了. 硬件电路连接 话不多说,先上电路连接图.本次使用 ...
- 智能浇花系统(ESP8266+APP Inventor+DHT11)
这里写自定义目录标题 利用ESP8266读DHT11温湿度 上传到APP端 硬件端 利用ESP8266读DHT11温湿度 首先,本项目是以以下四篇文章作为参考(基本就是按照这个来的,稍微修改了一些) ...
- 利用ESP8266制作环境监测系统+APP inventor制作手机App实时显示
利用ESP8266制作环境监测系统+APP inventor制作手机App实时显示 原理讲解 ESP8266读取各种传感器数值 传感器数据推送到云端 app inventor 制作app 接收实时数据 ...
- 【详细教程】App inventor连接阿里云平台(APP显示STM32发来的温湿度数据等)
前言: 目前已经成功将esp8266连接上了阿里云平台,实现了温湿度等数据的上云操作.但是在阿里云查看数据非常的不方便,因为阿里云的Web网页版都是临时的,链接在一段时间后会失效,除非绑定了域名才能长 ...
- (远程控制)App inventor 编写安卓app控制 ESP8266
(远程控制)App inventor 编写安卓app控制 ESP8266 第一 下载ESP8266示例(arduino ide 编程开发) 第二 修改demo例程 第三 app inventor 开发 ...
- 【巴法云】开源安卓App控制ESP8266,通过MQTT协议,APP Inventor 开发
[巴法云]APP Inventor 开发安卓app,通过MQTT控制ESP8266 第一 下载ESP8266示例(arduino ide 编程开发) 第二 修改demo例程 第三 app invent ...
- APP Inventor 基于网络微服务器的即时通信APP
APP Inventor 基于网络微服务器的即时通信APP 最近,老师要求我们用APP Inventor做一个APP,简单地做了一个即时通信的APP(超低配版的QQ,逃~),连肝了几个晚 上,目前已 ...
- udp服务器实时显示温湿度,(可远程)ESP8266读DHT11温湿度,APP inventor制作app实时显示...
原理讲解 原理简述:利用发布订阅模式.第一步,先读取DHT11温湿度数值,第二步,新建主题,然后esp8266往这个主题发送消息,第三步.app inventor 订阅这个主题,因为app inven ...
最新文章
- 【CVPR2020-Oral】上交华为:GPA跨域目标检测
- UVA10382喷水装置
- WFA 认证 启动 sigma_dut方法
- 解读全球海缆地图,带你看懂隐藏的秘密
- oracle dump 文件解析,oracle 事件转储udump文件
- css 中的伪类选择器before 与after
- 克隆对象和对象的继承
- 使用maven启动web项目报错
- Sentinel 实战应用中的小技巧
- python 编程之美
- 计算机信息技术专业排名,国内计算机信息技术学科强校盘点
- SQL Server 时间、日期函数
- html把div做成透明背景,DIV半透明层 CSS来实现网页背景半透明
- App上架各大应用市场的地址及操作方法
- 如何在水经注微图中加载地形地貌图进行道路设计
- 百度地图-根据经纬度定位示例-百度地图单点标注(整理)
- SQL SERVER SSMS查询分析器窗口关掉后没有保存的SQL找回-图文说明
- spark的数三角形算法_Graphx图算法【1】三角形TriangleCount
- 共阳极管的代码_共阳极数码管显示
- windows防火墙概述
热门文章
- 2022暑期杭电第八场
- ICM20602六轴传感器-IIC通信模式
- 计算机的四屏故障维修,四则电脑显示器硬件故障检修实用技巧
- css+div实现导航栏
- 学一点SQL注入基础
- VSCode搭建 c 环境教程
- LWIP-TCP Server连接两次之后无法连接问题
- [Andoid][踩坑]CTS 11_r3开始出现的testBootClassPathAndSystemServerClasspath_nonDuplicateClasses FAIL问题分析
- JN5168的SPI使用
- Ubuntu 安装 conda