stm32+esp8266+机智云手机app
现在很多大学嵌入式毕设都要求云端控制,本文章就教一下大家如何使用esp8266去连接机智云的app去进行显示stm32的外设传感器数据啊,控制一些外设啊等。
因为本文章主要教大家如何移植机智云的代码到自己的工程,所以前面的一些准备工作(烧录esp8266的固件,机智云app的使用等)大家可以去其他博主那里参考一下(如果大家有需要可以评论区提出,需求多的话也可以给大家写出来),但是esp8266的烧录工具和固件我会放到文章最后的网盘链接中,大家自行点赞获取。
此次演示的机智云app如下:
这里给大家准备了机智云app的下载链接
机智云APP(下载链接:https://devdocs.gizwits.com/download.html#166419072635445)
大家可以在虚拟设备中用机智云手机app扫码查看自己创建的设备:
app准备好以后就可以到mcu开发里面去自动生成代码了,如下图所示:
接下来就到了最重要的环节:代码移植环节
1.将下载下来的代码里面的Gizwits和Utils两个文件复制粘贴到自己的工程文件中
(同时别忘记在自己的keil工程代码里把这两个文件的.c和.h文件添加到工程中)
2.接下来首先我们打开工程代码中的gizwits_product.c,因为我们用的是标准库函数,所以要把hal库的内容注释掉(如果最后按照我的步骤编译报错,检查一下是否有其它的hal库函数没注释干净)
3.接下来依然在这个代码里往下滑,替换一行代码并注释两个函数如下图所示:
NVIC_SystemReset();

4.继续往下滑,继续注释代码,如下图所示:
5.接下来继续往下滑,将hal库的串口代码注释掉换成自己的使用标准库串口代码(并不一定要和我一样用串口3):
USART_SendData(USART3,buf[i]);while(USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET);if(i>=2&&buf[i] == 0xFF){USART_SendData(USART3,0x55);while(USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET);}

6.接下来gizwits_product.h要进行相应的修改,如下图所示
#include <stm32f10x.h>

7.接下来去你刚刚修改的串口中断函数里面添加相应的头文件和一段代码,如下所示
#include "gizwits_product.h"
gizPutData(&res, 1);

8.接下来开启一个1ms的定时器,在定时器中断函数里运行如下代码:
gizTimerMs();

9.接下来可以对gizwits_product.c内的userHandle( ) 函数进行赋值你想要上传到app的相应的传感器数据(下面会解释这个数据的来源):
10.接下来找到gizwits_product.c内的gizwitsEventProcess函数 ,下图圈出的地方可替换自己想控制的开关变量(这里我演示的是控制PA11口的高低电平,也就是控制一个led的亮灭)。
11.最后是主函数和while循环:初始化的代码中与esp8266通讯的串口是必须的,另一个串口是测试用的,会打印一些信息到上位机上(方便调试),1ms的定时器是必须的,此外下面的三个函数像我一样放着就行了。(图中圈出来的函数是必须的,其他的函数根据你自己的项目添加)
userInit();gizwitsInit();gizwitsSetMode(2);

12.然后是while循环:圈出来的函数是必须有的,此外xinlv和xunyang其实是获取超声波的距离,我懒得改变量名就直接用了。
userHandle();gizwitsHandle((dataPoint_t *)¤tDataPoint);

13.至此,代码就移植完了,接下来就可以烧录程序到单片机了,然后用手机机智云app去连接esp8266,最重要的是手机和esp8266最好用同一个wifi且必须是2.4G的,没有的话可以用手机热点,手机热点一般是2.4G的,机智云连接流程如下:
14.一键配置后就是输入wifi账号和密码(再提示一下要用2.4G的!!!)
然后按下图所示点击即可,

15.点击完后根据页面提示点击我已完成上述操作即可,当进入配对页面后,我们可以盯着开热点的手机,如果他的热点多了一个用户,大概率就是esp8266连接上了,这时候如果配对还没结束你也可以不用等了,直接退出就可以看到一个局域网在线的设备,就是你的设备,点击进去即可。
16.最终显示的效果如图所示 ,高度1和高度2是两个超声波测的值,不过由于while循环的速度很快,手机app数据更新的速度很慢,经常会出现oled上面信息更新了,手机上的数据要过一会才会更新,此外,我也测试了蜂鸣器的开关也是正常的在这里就不给大家演示了 。
通过网盘分享的文件:esp8266烧录固件.zip
链接: https://pan.baidu.com/s/1ZWBkJq87xvhORIBU87RNBQ?pwd=0531 提取码: 0531
如果大家需要我的工程源码可以一件三连后私聊获取!
相关文章:
stm32+esp8266+机智云手机app
现在很多大学嵌入式毕设都要求云端控制,本文章就教一下大家如何使用esp8266去连接机智云的app去进行显示stm32的外设传感器数据啊,控制一些外设啊等。 因为本文章主要教大家如何移植机智云的代码到自己的工程,所以前面的一些准备工作&#x…...
【android bluetooth 框架分析 01】【关键线程 1】【关键线程介绍】
1. 为什么学习蓝牙协议栈之前,必须先梳理清楚这几大线程? 为什么 学习协议栈之前 最好是要先梳理清楚 关键线程 bt_stack_manager_threadbt_jni_threadbt_main_threadbt_a2dp_sink_worker_thread 1.1 蓝牙协议栈是典型的“多线程异步系统” 蓝牙协议…...
CAS与sychronized优化
文章目录 CAS优化sychronized优化 CAS优化 CAS 优化过程: CAS是一种乐观锁机制,它通过比较内存中的值与预期值是否一致来决定是否更新。如果一致,则更新;如果不一致,则说明有其他线程修改了该值,CAS操作失败ÿ…...
软考中级-软件设计师 2023年上半年下午题真题解析:通关秘籍+避坑指南
📚 目录(快速跳转) 大题(下午题)(每题15分,共75分)一、数据流图/数据库设计 💾🌾 试题一:农事管理服务平台数据流分析问题1:实体识别问…...
Jetpack Compose使用navigation实现页面导航与参数传递
综述 简单一个dmeo搞清如何使用navigation实现页面之间的跳转与参数传递。 开发环境与依赖 AndroidStudio Meerkat AGP 8.2.2 Gradle 8.11.1 页面导航依赖 implementation("androidx.navigation:navigation-compose:2.7.6") 配置路由导航 新建文件实现路由导航…...
数据结构|排序算法(二)插入排序 希尔排序 冒泡排序
一、插入排序 1.算法思想 插入排序(Insertion Sort)是一种简单的排序算法,其基本思想是:将待排序的元素插入到已经有序的序列中,从而逐步构建有序序列。 具体过程如下: 把待排序的数组分为已排序和未排…...
Spring MVC 操作会话属性详解(@SessionAttributes 与 @SessionAttribute)
Spring MVC 操作会话属性详解(SessionAttributes 与 SessionAttribute) 1. 核心注解对比 注解作用范围功能SessionAttributes类级别声明控制器中需要持久化的模型属性(存入 HttpSession)SessionAttribute方法参数/返回值显式绑定…...
vscode和cursor对ubuntu22.04的remote ssh和X-Windows的无密码登录
这里写自定义目录标题 写在前面需求的描述问题的引出 昨天已使能自动登录上午我的改变UBUNTU 22.04关闭密码规则一:修改 /etc/pam.d/common-password 文件二:修改 /etc/security/pwquality.conf 文件方法三:禁用 pam_pwquality.so 模块 vscod…...
案例-流量统计
1.建一个data目录,在data下建log.txt文件 输入手机号码 上行流量 下行流量 2.在com.example.flow下建四个Java类3.flowBean flowMapper flowReducer flowDriver...
题目 3248: 蓝桥杯2024年第十五届省赛真题-最强小队
题目 3248: 蓝桥杯2024年第十五届省赛真题-最强小队 时间限制: 2s 内存限制: 512MB 提交: 1212 解决: 264 题目描述 在蓝桥王国,一支勇士队伍依照既定的顺序排列。队伍由 n 位勇士组成,每位勇士都有一个力量值,分别为 a1, a2, . . . , an。 …...
Codeforces Round 1011 (Div. 2)
Dashboard - Codeforces Round 1011 (Div. 2) - Codeforces Problem - B - Codeforces 题目大意: 给你一个数组,你可以用一段子序列中没有出现的最小非负整数,替换数组中的组序列,经过若干操作,让数组变为长度为1,值…...
时序数据异常检测-综述
更新中 异常检测基本概念 广义的Out-of-Distribution(广义的OOD)来描述异常检测的相关问题。OOD包括五个相关的子领域,分别为Anomaly Detection(AD)、Novelty Detection(ND)、Open Set Recogntion(OSR)、Out-of-Distribution(OOD)和Outlier Detection(OD)。这5个…...
多类型医疗自助终端智能化升级路径(代码版.下)
医疗人机交互层技术实施方案 一、多模态交互体系 1. 医疗语音识别引擎 # 基于Wav2Vec2的医疗ASR系统 from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC import torchaudioclass MedicalASR:def __init__(self):self.processor = Wav2Vec2Processor.from_pretrai…...
蓝桥杯专项复习——双指针
目录 双指针算法:双指针算法-CSDN博客 最长连续不重复子序列 P8783 [蓝桥杯 2022 省 B] 统计子矩阵 双指针优化思路:当存在重复枚举时,可以考虑是否能使用双指针进行优化 双指针算法:双指针算法-CSDN博客 最长连续不重复子序列…...
BetaFlight参数配置解读
BetaFlight参数配置解读 📌相关篇《Betaflight固件编译和烧录说明》🥕各型号已编译好的配置文件资源(.config):https://github.com/betaflight/unified-targets/tree/master/configs/default🌿各型号配置头…...
Java 容器源码分析
一、哈希表 1、引入 hash 表 在无序数组中按照内容查找,效率底下,时间复杂度是 O(n) 在有序数组中按照内容查找,可以使用折半查找,时间复杂度 O(log2n) 哈希表可以不进行比较,通过计算得到地…...
【Java中级】11章、枚举 - java引用数据类型,枚举介绍、快速入门,了解枚举类的基本使用方式【1】
文章内容: 自定义实现枚举enum关键字实现枚举 ❤️内容涉及枚举的定义,快速入门,注意事项和小题巩固知识点 🌈 跟着B站一位老师学习的内部类内容,现写这篇文章为学习内部类的小伙伴提供思路支持,希望可以一…...
Jmeter 插件【性能测试监控搭建】
1. 安装Plugins Manager 1.1 下载路径: Install :: JMeter-Plugins.org 1.2 放在lib/ext目录下 1.3 重启Jmeter,会在菜单-选项下多一个 Plugins Manager菜单,打开即可对插件进行安装、升级。 2. 客户端(Jmeter端) 2.1 安装plugins manager…...
【ES系列】Elasticsearch从入门到精通保姆级教程 | 启篇
🔥 本系列将带你从零开始学习Elasticsearch,通过保姆级教程,手把手教你掌握这个强大的搜索与分析引擎。无论你是完全的新手,还是想系统学习ES的开发者,这个系列都能满足你的需求。 📚博主匠心之作,强推专栏: JAVA集合专栏 【夜话集】JVM知识专栏数据库sql理论与实战【…...
python内置标准模块--OS
内置标准模块–OS 在 Python 中,os 是一个内置标准模块,全称是 Operating System(操作系统)。它的核心作用是与当前操作系统交互,提供对文件系统、进程管理、环境变量等操作系统功能的访问接口 1. os 模块的核心功…...
大模型的6种设计模式
大模型的六种设计模式 目录 1. 链式思考模式 (Chain-of-Thought, CoT)2. ReAct模式 (Reasoning and Acting)3. 自洽性模式 (Self-Consistency)4. 代理模式 (Agent)5. 检索增强生成 (RAG - Retrieval Augmented Generation)6. 提示工程模式 (Prompt Engineering Patterns)总结…...
大模型的输出:温度对输出的影响
大模型的输出:温度对输出的影响 温度T 在大模型(如人工智能语言模型)中,“温度”(Temperature)是一个重要的参数,用于控制模型生成文本的随机性和多样性。它通常用于调整模型输出的概率分布&a…...
Unity中Spine骨骼动画完全指南:从API详解到避坑实战
Unity中Spine骨骼动画完全指南:从API详解到避坑实战 一、为什么要选择Spine? Spine作为专业的2D骨骼动画工具,相比传统帧动画可节省90%资源量。在Unity中的典型应用场景包括: 角色换装系统(通过插槽替换部件)复杂连招系统(动画混合与过渡)动态表情系统(面部骨骼控制)…...
汇丰eee2
聚合和继承有什么样的优点和区别,什么时候决定用,现实开发中,选择哪一种去使用? 聚合的优点: 灵活性: 聚合是一种弱耦合关系,被聚合对象可以独立存在,可以灵活地替换或修改被聚合对…...
C++Cherno 学习笔记day17 [66]-[70] 类型双关、联合体、虚析构函数、类型转换、条件与操作断点
b站Cherno的课[66]-[70] 一、C的类型双关二、C的union(联合体、共用体)三、C的虚析构函数四、C的类型转换五、条件与操作断点——VisualStudio小技巧 一、C的类型双关 作用:在C中绕过类型系统 C是强类型语言 有一个类型系统,不…...
wordpress 利用 All-in-One WP Migration全站转移
导出导入站点 在插件中查询 All-in-One WP Migration备份并导出全站数据 导入 注意事项: 1.导入部分限制50MB 宝塔解决方案,其他类似,修改php.ini配置文件即可 2. 全站转移需要修改域名 3. 大文件版本,大于1G的可以参考我的…...
springboot+easyexcel实现下载excels模板下拉选择
定义下拉注解 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface ExcelDropDown {/*** 固定下拉选项*/String[] source() default {};/*** 动态数据源key(从上下文中获取)*/String sourceMethod() default "";…...
LeetCode.3396.使数组元素互不相同所需的最少操作次数
3396. 使数组元素互不相同所需的最少操作次数 给你一个整数数组 nums,你需要确保数组中的元素 互不相同 。为此,你可以执行以下操作任意次: 从数组的开头移除 3 个元素。如果数组中元素少于 3 个,则移除所有剩余元素。 注意&…...
【工具使用】在OpenBMC中使用GDB工具来定位coredump原因
在OpenBMC调试中,有时会产生coredump却不知道从哪里入手分析,GDB工具就可以提供帮助。 1 编译带GDB工具的镜像 OpenBMC镜像中默认没有加入GDB工具,因此首先需要编译一个带GDB工具的OpenBMC镜像用于调试。在recipes-phosphor/packagegroups/…...
Linux系统(Ubuntu和树莓派)的远程操作练习
文章目录 一、实验一(一)实验准备(二)Ubuntu 下的远程操作(三)树莓派下的远程操作(四)思考 二、实验二1.talk程序2. C 编写 Linux 进程间通信(IPC)聊天程序 一…...
