利用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通信相关推荐

  1. APP Inventor练习——蓝牙通信

    文章目录 前言 一.蓝牙调试 1.组件设计 2.逻辑设计 二.蓝牙对战 1.组件设计 2.逻辑设计 3.效果展示 总结 前言 练习APP Inventor中蓝牙的使用,并为之前的项目APP小游戏--一 ...

  2. stm32开发板下esp8266通信

    前言 Esp8266算是一个傻瓜式的wifi通信模块,前前后后也用过好几次,这次隔了好久没用有些东西都忘了,所在这里记录一下,防止以后用的时候又忘了. 硬件电路连接 话不多说,先上电路连接图.本次使用 ...

  3. 智能浇花系统(ESP8266+APP Inventor+DHT11)

    这里写自定义目录标题 利用ESP8266读DHT11温湿度 上传到APP端 硬件端 利用ESP8266读DHT11温湿度 首先,本项目是以以下四篇文章作为参考(基本就是按照这个来的,稍微修改了一些) ...

  4. 利用ESP8266制作环境监测系统+APP inventor制作手机App实时显示

    利用ESP8266制作环境监测系统+APP inventor制作手机App实时显示 原理讲解 ESP8266读取各种传感器数值 传感器数据推送到云端 app inventor 制作app 接收实时数据 ...

  5. 【详细教程】App inventor连接阿里云平台(APP显示STM32发来的温湿度数据等)

    前言: 目前已经成功将esp8266连接上了阿里云平台,实现了温湿度等数据的上云操作.但是在阿里云查看数据非常的不方便,因为阿里云的Web网页版都是临时的,链接在一段时间后会失效,除非绑定了域名才能长 ...

  6. (远程控制)App inventor 编写安卓app控制 ESP8266

    (远程控制)App inventor 编写安卓app控制 ESP8266 第一 下载ESP8266示例(arduino ide 编程开发) 第二 修改demo例程 第三 app inventor 开发 ...

  7. 【巴法云】开源安卓App控制ESP8266,通过MQTT协议,APP Inventor 开发

    [巴法云]APP Inventor 开发安卓app,通过MQTT控制ESP8266 第一 下载ESP8266示例(arduino ide 编程开发) 第二 修改demo例程 第三 app invent ...

  8. APP Inventor 基于网络微服务器的即时通信APP

    APP Inventor 基于网络微服务器的即时通信APP  最近,老师要求我们用APP Inventor做一个APP,简单地做了一个即时通信的APP(超低配版的QQ,逃~),连肝了几个晚 上,目前已 ...

  9. udp服务器实时显示温湿度,(可远程)ESP8266读DHT11温湿度,APP inventor制作app实时显示...

    原理讲解 原理简述:利用发布订阅模式.第一步,先读取DHT11温湿度数值,第二步,新建主题,然后esp8266往这个主题发送消息,第三步.app inventor 订阅这个主题,因为app inven ...

最新文章

  1. 【CVPR2020-Oral】上交华为:GPA跨域目标检测
  2. UVA10382喷水装置
  3. WFA 认证 启动 sigma_dut方法
  4. 解读全球海缆地图,带你看懂隐藏的秘密
  5. oracle dump 文件解析,oracle 事件转储udump文件
  6. css 中的伪类选择器before 与after
  7. 克隆对象和对象的继承
  8. 使用maven启动web项目报错
  9. Sentinel 实战应用中的小技巧
  10. python 编程之美
  11. 计算机信息技术专业排名,国内计算机信息技术学科强校盘点
  12. SQL Server 时间、日期函数
  13. html把div做成透明背景,DIV半透明层 CSS来实现网页背景半透明
  14. App上架各大应用市场的地址及操作方法
  15. 如何在水经注微图中加载地形地貌图进行道路设计
  16. 百度地图-根据经纬度定位示例-百度地图单点标注(整理)
  17. SQL SERVER SSMS查询分析器窗口关掉后没有保存的SQL找回-图文说明
  18. spark的数三角形算法_Graphx图算法【1】三角形TriangleCount
  19. 共阳极管的代码_共阳极数码管显示
  20. windows防火墙概述

热门文章

  1. 2022暑期杭电第八场
  2. ICM20602六轴传感器-IIC通信模式
  3. 计算机的四屏故障维修,四则电脑显示器硬件故障检修实用技巧
  4. css+div实现导航栏
  5. 学一点SQL注入基础
  6. VSCode搭建 c 环境教程
  7. LWIP-TCP Server连接两次之后无法连接问题
  8. [Andoid][踩坑]CTS 11_r3开始出现的testBootClassPathAndSystemServerClasspath_nonDuplicateClasses FAIL问题分析
  9. JN5168的SPI使用
  10. Ubuntu 安装 conda