实验: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:但是,一直没有找到官方文档的出处,有知道的兄弟,烦请评论区提供下地址!!! ...
随机推荐
- win10 扩展c盘 “PARTITION_BASIC_DATA_GUID"
一不小心化身为c盘战士了,系统卡到不行 于是通过pe登入系统(我自己用的wintogo),然后下载傲梅分区助手(嘎嘎好用) 傲梅官网 https://www.disktool.cn/download. ...
- Win10用户目录迁移后变成英文的修改办法
比如我的目录从C:\Users\Lemon修改到D:\Users\Lemon后: 1.首先可以将Windows文件管理器选项中的"隐藏受保护的操作系统文件"去掉,就可以看到每个目录 ...
- C#开发上位机常用
从深圳回内地几年了,突然想把之前项目中用到的东西做信合集,别忘记了!!!
- 前端之Vue day07 混入、插件、elementui、Router、Vuex
一.Props补充 1.父传子在子组件标签上起自定义属性 使用数组 就不演示了,太简单了 2.限制传入的数据类类型 使用对象 同样,展示过的 3.props补充 就是套对象,加以限制 props:{ ...
- 003. html篇之《表单》
html篇之<表单> 一.结构 <form action="url" method="post" name=""> ...
- PostgreSQL-14 安装配置-wsl_v1_ubuntu22.04
环境准备 pgAdmin: Cisco2022 postgrep数据库: postgres: Postgres_2023 install https://learn.microsoft.com/en- ...
- C# List间的交集并集差集
一.简单类型List的交集并集差集 1.先定义两个简单类型的List List<int> listA = new List<int>() { 1, 2, 3, 4, 5, 6, ...
- LeetCode习题集
作为一名本科计算机科学与技术的学生,<数据结构与算法><算法分析与设计>这两门课没有学到特别好 上了研究生之后感觉,这些东西需要重新拾起 于是,我找了一个平台,LeetCode ...
- SQLSERVER判断是否为数字ISNUMERIC
从SQLSERVER 2005新增isnumeric函数,返回1则字符串是数值,返回0则认为不是数值 但里面有些其他的字符也返回1,不知道是怎么个思路,是不是花旗国的规则? SELECT ISNUME ...
- iOS基础 - SceneDelegate
前言 1 - 自从 Xcode11 发布以来,当你使用新 XCode 创建一个新的 iOS 项目时 SceneDelegate 会被默认创建 2 - 在 iOS 13 后 SceneDelegate ...