当前位置: 首页 > article >正文

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

最近一直在想着用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界面这里


http://www.kler.cn/a/9375.html

相关文章:

  • GitLab实现 HTTP 访问和 SMTP 邮件发送
  • 软件设计师-信息安全
  • LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
  • 【C++ 算法进阶】算法提升十三
  • MySQL 中的索引下推功能
  • 头歌网络安全(11.12)
  • C++模板基础(六)
  • 故障定级和定责
  • 处理机调度与死锁习题
  • 蓝桥杯第十四届省赛完整题解 C/C++ B组
  • Window常用命令
  • Dubbo架构整体设计
  • 小规模容器编排使用Docker Swarm不香么,用个锤子的kubernetes
  • Leetcode.2399 检查相同字母间的距离
  • webpack介绍
  • 三十四、java中的引用
  • react简单实现防抖和节流教程方法
  • 用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)
  • 【前端做项目常用】相关插件的官网 总结
  • 【web自动化测试】
  • LinuxGUI自动化测试框架搭建(七)-Ubuntu上安装配置Pycharm
  • windows 如何安装cuda pytorch gpu
  • 手动挡科目三道路驾驶技能考试及理论考试要点
  • 基于金豺优化算法python代码
  • 智慧停车怎么实现的,停车场寻车是怎么实现的
  • 网络编程初探