实验:STM32-ARDUINO-ESP01采用AT指令,通过MQTT连接上ONENET
1.硬件准备

要求:STM32支持Arduino.
2.程序逻辑结构


3.主流程状态机

4.测试数据抓图

5. 关键程序代码
unsigned char g_ArrTemp[1024];
int AT_SendCmd ( char * atCmd, char * res1,char * res2, int dly )
{
int i=0;
int num;
unsigned long old=millis(); bool flag1=false;
bool flag2=false;
int status=1; if(res2==NULL)flag2=true; AT_ClearPara();
Serial.print((char *)atCmd); Serial2.print((char *)atCmd);
Serial2.flush(); while(1)
{
if(millis()-old>dly)
{
break;
} if(Serial2.available())
{
if(i<1023)
{
g_ArrTemp[i++]=Serial2.read();
}
}
if(res1!=NULL)
{
if(MYstrstr(g_ArrTemp,i,(unsigned char*)res1)==0)flag1=true;
}
if(res2!=NULL)
{
if(MYstrstr(g_ArrTemp,i,(unsigned char*)res2)==0)flag2=true;
} if(flag1&& flag2)
{
status=0;
break;
} } num=i;
for(i=0;i<num;i++)
{
Serial.print((char) g_ArrTemp[i]); }
AT_ClearPara();
Serial.println(); return status;
} int AT_SendData ( unsigned char *data, unsigned int len )
{
int i=0,num;
char cmdBuf[400];
unsigned long old=millis(); sprintf( cmdBuf,"AT+CIPSEND=%d\r\n",len); if (AT_SendCmd ( cmdBuf, ">",NULL, 60)==0)
{
Serial2.write ( data, len );
Serial2.flush(); //等待sendok
while(1)
{
if(millis()-old>7000)
{
return 1;
} if(Serial2.available())
{
if(i<1023)
{
g_ArrTemp[i++]=Serial2.read();
}
} if(MYstrstr(g_ArrTemp,i,(unsigned char*)"OK")==0)
{
break;
} } //打印接收到的数据
num=i;
for(i=0;i<num;i++)
{
Serial.print((char) g_ArrTemp[i]);
}
AT_ClearPara(); return 0;
} return 1;
}
5.程序代码汇总
1)arduino主程序
#include "main.h"
void setup() {
System_Init();
}
void loop() {
System_main();
}
链接:https://pan.baidu.com/s/1FaTYcOz_0TQvpW9dGPBFXw
提取码:hbfr
--来自百度网盘超级会员V5的分享
6.拓展开发
修改netapi.cpp就可以支持SIM900, W5500等芯片。
实验:STM32-ARDUINO-ESP01采用AT指令,通过MQTT连接上ONENET的更多相关文章
- angular2采用自定义指令(Directive)方式加载jquery插件
由于angular2兴起不久,相关插件还是很少,所以有时候不得不用一些jquery插件来完成项目, 那么如何把jquery插件放到angular2中呢?采用自定义指令! 在上下文之前要引入jquery ...
- [转]JVM指令详解(上)
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码 助记符 ...
- STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...
- Arduino使用HC05蓝牙模块与手机连接
Arduino使用HC05蓝牙模块与手机连接 一切都是最好的选择 首先是线路连接,一定不要接错了 Arduino 代码 #include <SoftwareSerial.h> // Pin ...
- Arduino可穿戴教程之第一个程序——上传运行程序(四)
Arduino可穿戴教程之第一个程序——上传运行程序(四) 2.4.5 上传程序 现在所有Arduino IDE的设置都完成了,我们就可以将示例程序上传到板子中了.这非常简单,只需要单击如图2.45 ...
- 在linux安装redis单机和集群后,如何在windows上使用redis客户端或者java代码访问错误的原因很简单,就是没有连接上redis服务,由于redis采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。
这几天在学习在linux上搭建服务器的工作,可谓历经艰辛.可喜最后收获也不少. 这次是在linux上搭建redis服务器后从windows上缺无法访问,连接不上. 仔细回忆以前搭建nginx和ftp的 ...
- Android Studio如何配置CURL指令一键打包apk上传至蒲公英
Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{ buildTypes { //配置 ...
- MQTT协议 - arduino ESP32 通过精灵一号 MQTT Broker 进行通讯的代码详解
前言 之前研究了一段时间的 COAP 协议结果爱智那边没有测试工具,然后 arduino 也没有找到合适的库,我懒癌发作也懒得修这库,就只能非常尴尬先暂时放一放了.不过我在 爱智APP -> 设 ...
- STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)
系统时钟滴答实验很不难,我就在面简单说下,但其中涉及到了STM32最复杂也是以后用途最广的外设-NVIC,如果说RCC是实时性所必须考虑的部分,那么NVIC就是stm32功能性实现的基础,NVIC的难 ...
- 关于oracle RAC心跳线采用直连 还是交换机连接的建议
关于oracle RAC心跳线的连接方式,各个论坛,包括网上文章的说法是:官方说是不建议直连,建议采用交换机连接的方式!PS:但是,一直没有找到官方文档的出处,有知道的兄弟,烦请评论区提供下地址!!! ...
随机推荐
- 剑指 Offer II 二分查找
068. 查找插入位置 class Solution { public: int searchInsert(vector<int>& nums, int target) { int ...
- shell之flock
1.flock 最大的用途就是实现对 crontab 任务的串行化:为了防止crontab 任务出现多实例的情况,导致系统内存被耗尽. 在 crontab 任务中,有可能出现某个任务的执行时间超过了 ...
- (03-14) synopsys中工具介绍,VCS,DC,PT等
https://blog.csdn.net/fangxiangeng/article/details/80981536 (1)Nlint 检查,spyglass (2)PT 静态时序检查 (3)Icc ...
- 【Java学习Day08】数据类型、变量及字节
数据类型 强类型语言 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 弱类型语言 要求变量的使用要符合规定,所有变量都必须先定义后才能使用 Java的两大数据类型 public clas ...
- vue打包添加时间戳,实现更新项目自动清除缓存
本来vue打包会自动用chunkhash来解决缓存问题,但是部分浏览器不会自动更新,因此可以通过后面t=${ }的不同来实现自动重新加载文件,保持最新的界面 (1).webpack打包:修改build ...
- Codeforces Round #843 (Div. 2) C【思维】
https://codeforces.com/contest/1775/problem/C 题意 题意是说,给你n和x,你要求出最小的满足要求的m,使得 \(n\)&\((n+1)\)& ...
- c++中内联函数和宏函数的区别
一. 区别: 是不是函数: 宏定义不是函数,但是使用起来像函数.预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率: 内联函数本质上是一个函数,内联函数一般用于函数体的代码比 ...
- Pyscript使用本地Pyodide配置方法
背景 Pyscript工程本身很小,KB级别,引用的Pyodide工程比较大,因为包含了各种类库的wasm文件,默认引用了cdn上的文件,cdn上的文件又在外网,访问会中断导致不可用,于是需要使用本地 ...
- WPF中获取主窗口 MainWindow 实例,以及在其他窗口中获取 MainWinodw 中的控件
var _mainWindow = Application.Current.Windows .Cast<Window>() .FirstOrDefault(window => win ...
- chatgpt 的训练数据时间内容估计
I noticed that the data you quoted is dated September 2021, but it's already 2023. I apologize for t ...