jjzjj

stm32 esp01s Qt 巴法云平台控制小灯

张芮晨 2023-05-05 原文

最近一直在想着用esp01s和stm32做个控制的东西,现在先把现在做好的一部分写出来,巴法云平台我觉得是一个不错物联网平台,接口文档资料都十分清晰。
这个demo是esp1s和stm32串口通信,然后qt上位机和esp01s是tcp通信
这样就可以实现远程控制led

首先准备esp01s,stm32f10c8t6,led,Qt Creator等工具
一般刚买的esp01s是没有下载AT的,所以你先下载好AT固件,然后用串口助手测试一下

这样就说明AT固件安装成功了
然后打开巴法云平台巴法云,根据文档新建一个tcp创客云主题

我这里起的名字叫testesp
接着连接硬件
Esp01SRx-stm32 Tx
Esp01STx-stm32 Rx
Esp01SEN-VCC
Esp01SVCC-VCC
Esp01SGND-GND

LED的灯自定义一个GPIO引脚然后自己连接就好

然后编写stm32的驱动代码

  Serial_Init();
    Led_Init();
    
    Serial_SendString("AT+RST\r\n");
    
    Delay_ms(1000);
    Serial_SendString("AT+CWMODE=3\r\n");
    Delay_ms(1000);
    
    
    Serial_SendString("AT+CWJAP=\"123\",\"12345678\"\r\n");
    Delay_ms(2000);
    
    
    Serial_SendString("AT+CIPMODE=1\r\n");
    Delay_ms(1000);
    
    
    Serial_SendString("AT+CIPSTART=\"TCP\",\"bemfa.com\",8344\r\n");
    Delay_ms(1000);
    
    Serial_SendString("AT+CIPSEND\r\n");
    
    Delay_ms(1000);
    
    Serial_SendString("cmd=1&uid=9dc59b8dbf234949842d49575bf6f4db&topic=testesp\r\n");
    
    
    while (1){
        if (Serial_RxFlag == 1){
            if (strstr((const char*)Serial_RxPacket,"onled"))
            {
                GPIO_SetBits(GPIOA, GPIO_Pin_0);
            }else if(strstr((const char*)Serial_RxPacket,"offled")){
                GPIO_ResetBits(GPIOA, GPIO_Pin_0);
            }
            Serial_RxFlag = 0;
        }
        
    }

接着是qt的代码:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    TcpInit();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::TcpInit()
{
    tcpSocket=new QTcpSocket(this);
    connect(tcpSocket,&QTcpSocket::readyRead,
            this,&Widget::onReadMessage);
    connect(tcpSocket,SIGNAL(QAbstractSocket::SocketError),
            this,SLOT(onDisplayError(QAbstractSocket::SocketError)));

}

void Widget::onReadMessage()
{
    QByteArray bt;
    bt.resize(tcpSocket->bytesAvailable());
    tcpSocket->read(bt.data(),bt.size());
    //将客户端反馈的数据显示到标签上
    ui->label->setText(bt);

}

void Widget::onDisplayError(QAbstractSocket::SocketError e)
{
    qDebug()<<"SocketError:"<<e<<endl
           <<tcpSocket->errorString();

}

void Widget::on_btnconn_clicked()
{

    tcpSocket->abort();
    //连接服务端
    tcpSocket->connectToHost("bemfa.com",8344);
    QString str = "cmd=1&uid=9dc59b8dbf234949842d49575bf6f4db&topic=testesp\r\n";
    tcpSocket->write(str.toUtf8());
}

void Widget::on_btnled_clicked()
{
    QString orderon ="cmd=2&uid=9dc59b8dbf234949842d49575bf6f4db&topic=testesp&msg=onled\r\n";
    QString orderoff ="cmd=2&uid=9dc59b8dbf234949842d49575bf6f4db&topic=testesp&msg=offled\r\n";
    QString strButFlag = ((QPushButton*)sender()) -> text();

    if(strButFlag == "开灯")
    {
        ui->btnled-> setText("关灯");
        QByteArray str = orderon.toUtf8();
        tcpSocket->write(str);

    }
    else
    {
        ui->btnled -> setText("开灯");
        QByteArray str = orderoff.toUtf8();
        tcpSocket->write(str);
    }
}


是不是很简单,通过发送命令"on"/“off"给云,然后云发给esp01s,esp01s发给stm32,stm32判断云发的数据有没有"on"/"off"然后执行相应的代码

这样就可以实现控制led小灯了,进而你控制别的硬件都可以,主题思路就是这些,边边角角需要你自己探索,埋个伏笔,我最近一直在想传感器如何上传数据给qt界面这里

有关stm32 esp01s Qt 巴法云平台控制小灯的更多相关文章

  1. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  2. STM32的HAL和LL库区别和性能对比 - 2

    LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L

  3. ESP32学习入门:WiFi连接网络 - 2

    目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方

  4. Spring Security 6.0系列【32】授权服务器篇之默认过滤器 - 2

    有道无术,术尚可求,有术无道,止于术。本系列SpringBoot版本3.0.4本系列SpringSecurity版本6.0.2本系列SpringAuthorizationServer版本1.0.2源码地址:https://gitee.com/pearl-organization/study-spring-security-demo文章目录前言1.OAuth2AuthorizationServerMetadataEndpointFilter2.OAuth2AuthorizationEndpointFilter3.OidcProviderConfigurationEndpointFilter4.N

  5. ruby - 摘要::CRC32 与 Zlib - 2

    在我的代码中,我需要使用各种算法(包括CRC32)对文件进行哈希处理。因为我还在Digest系列中使用其他加密哈希函数,所以我认为为它们维护一个一致的接口(interface)会很好。为了记录,我确实找到了digest-crc,一颗完全符合我要求的gem。问题是,Zlib是标准库的一部分,并且有一个我想重用的CRC32工作实现。此外,它是用C编写的,因此它应该提供与digest-crc相关的卓越性能,后者是纯ruby​​实现。实现Digest::CRC32一开始看起来非常简单:%w(digestzlib).each{|f|requiref}classDigest::CRC32一切正常:

  6. ruby - 安装gem : Couldn't reserve space for cygwin's heap, Win32错误487错误 - 2

    我正在尝试在我的机器上安装win32-apigem,但在构建native扩展时我遇到了一些问题:$geminstallwin32-api--no-ri--rdocTemporarilyenhancingPATHtoincludeDevKit...Buildingnativeextensions.Thiscouldtakeawhile...C:\Programs\dev_kit\bin\make.exe:***Couldn'treservespaceforcygwin'sheap,Win32error0ERROR:Errorinstallingwin32-api:ERROR:Failed

  7. Ruby 1.9 - 没有这样的文件可以加载 'win32/open3' - 2

    我在Windows上运行ruby​​1.9.2并试图移植在Ruby1.8中工作的代码。该代码使用以前运行良好的Open4.popen4。对于1.9.2,我做了以下事情:通过geminstallPOpen4安装了POpen4需要POpen4通过require'popen4'尝试像这样使用POpen4:Open4.popen4("cmd"){|io_in,io_out,io_er|...}当我这样做时,我得到了错误:nosuchfiletoload--win32/open3如果我尝试安装win32-open3(geminstallwin32-open3),我会收到错误消息:win32-op

  8. Dell Inspiron 5488加内存32G - 2

    DellInspiron5488加内存32G 原装内置内存仅仅8G,目前看,真的太小了! 1.内存型号Dell5488内存型号:DDR42666。笔记本有两个内存插槽,原装占了一个,还能扩展一个。 2.买内存如果买Dell原装笔记本内存,8G就得500块左右。 我咨询了一下,三星的笔记本内存,可以兼容。16G,299块(2023年2月23日,京东价) Dell5488内存组合,最多只能插两根16G内存。 我于是买了两根三星16G内存。装上,很爽😄 跑国产系统统信UOS,再也看不到用交换区了,32G内存,爽!  

  9. NFT交易平台开发 创建NFT数字藏品平台 - 2

    为什么需要NFT市场?NFTMarketplace允许用户购买、出售、交易、查看或创建自己的NFT,就像他们需要一个市场来购买物理或数字世界中的大多数产品一样。几乎每个人都可以进入NFT市场,但要做到这一点,用户必须满足以下要求:一个NFT市场用户账户,允许您在给定平台上购买NFT。你需要一个与区块链兼容的加密钱包来购买NFT。NFTMarketplace非常重要,因为它连接了买卖双方,并为用户提供了多种工具来快速创建自己的NFT。艺术家可以在市场上列出要出售的NFT,买家可以通过投标过程探索市场并购买物品。NFT市场开发过程解释创建NFT市场是一个耗时的过程,需要编程知识和理解。那么搭建NF

  10. Ruby跨平台EOF符号的写法 - 2

    在Ruby中是否有一种平台无关的方式将EOF符号写入字符串。在*nix中,我认为符号是^D,但在Windows中是^Z,这就是我问的原因。 最佳答案 EOF不是一个字符,它是一个状态。终端使用控制字符来表示此状态(C-d)。没有这样的事情是“读一个EOF字符”,写一个也是一样的。如果您正在写入文件,请在完成后将其关闭。看这个mailinglistpost:ItsoundslikeyouarethinkingofEOFasanin-bandbutspecialcharactervaluethatmarkstheendoffile.It

随机推荐