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界面这里

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值