实验: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:但是,一直没有找到官方文档的出处,有知道的兄弟,烦请评论区提供下地址!!! ...
随机推荐
- QT使用中出现的问题
1.运行程序程序弹出The CDB process terminated 2.调试弹出窗口提示缺少qtcreatorcdbext.dll 1.运行程序程序弹出The CDB process termi ...
- 如何将SinglaR与MVC和Web Api集成
一:SinglaR与MVC结合 1:新建一个MVC的项目 2:新建一个SignalR"永久链接类"=>MyConnection1 3:主要的代码要写一个泛型继承Control ...
- python函数传参是传值还是指针
python中,往函数传参传的是指针,并非传值. 代码说话 如果改变函数参数的值,我们来看看改变: 但是如果是传的列表这种可变数据类型呢 传列表并没有发送改变,仍然指向的是原来的地址. 这是因为传的数 ...
- selenium------关于switch_to的用法场景
基于python3的语法,driver.switch_to_alert()的表达会出现中划线,因此需要把后面的下划线改为点.一.目前接触到的switch_to的用法包括以下几种:1. 切换到制定的wi ...
- (0303)《计算机体系结构 量化研究方法》PDF
(01) https://blog.csdn.net/konghhhhh/article/details/106828402 存储器相关 (1) https://blog.csdn.net/iva_ ...
- P5731 蛇形方阵
P5731 [深基5.习6]蛇形方阵 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) //为什么用动态二维数组 --->To play to user's input, but ...
- 分治-1-归并排序(Divide and Conquer-1-merge sort)
#include <stdio.h> #define INFINITY 999999 #define LEN(A) ((sizeof (A)) / (sizeof A[0])) void ...
- 从各种点理解Unity中的协程
这个写的很好,https://zhuanlan.zhihu.com/p/59619632
- 查询最上活动的activity
adb shell dumpsys window windows | grep mCurrent
- PowerShell学习笔记三_使用PS操作远程服务器
PowerShell远程操作服务器 参考: https://www.cnblogs.com/sparkdev/p/7200004.html 补充: 1. 服务器上,要被Powershell远程操作,是 ...