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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++模板基础(六)

类模板与成员函数模板 ● 使用 template 关键字引入模板&#xff1a; template class B {…}; – 类模板的声明与定义 翻译单元的一处定义原则 template<typename T> class B; //类模板的声明template<typename T> class B //类模板的定义 {};template<typenam…

故障定级和定责

故障管理的第一步是对故障的理解&#xff0c;只有正确地面对故障&#xff0c;我们才能够找到更合理的处理方式。 这便需要做两个工作&#xff1a;一是跟踪线上故障处理和组织故障复盘&#xff0c;二是制定故障定级定责标准&#xff0c;同时有权对故障做出定级和定责。 所以&a…

处理机调度与死锁习题

1.对于下列三个作业&#xff0c;采用不可抢占的调度方式&#xff1a;先来先服务&#xff08;&#xff26;&#xff29;&#xff26;&#xff2f;&#xff09;和短作业优先&#xff08;&#xff33;&#xff2a;&#xff26;&#xff09;调度算法&#xff0c;分别计算它们的平均…

蓝桥杯第十四届省赛完整题解 C/C++ B组

没有测评&#xff0c;不知道对不对&#xff0c;仅仅过样例而已 试题 A: 日期统计 本题总分&#xff1a;5 分 【问题描述】 小蓝现在有一个长度为 100 的数组&#xff0c;数组中的每个元素的值都在 0 到 9 的 范围之内。数组中的元素从左至右如下所示&#xff1a; 5 6 8 6 9…

Window常用命令

一、快捷键 1、自带快捷键 序号快捷键作用1windowsGXBOX录屏2cmd >osk屏幕键盘3cmd >calc计算器4cmd >mrt恶意软件删除工具 2、浏览器快捷键 序号快捷键作用1Alt P浏览器图片下载&#xff08;来自油猴脚本&#xff09; 二、其他功能 1、解决端口占用 第一步&…

Dubbo架构整体设计

一、Dubbo调用关系说明 1.1 组成部分 在这里主要由四部分组成: ● Provider: 暴露服务的服务提供方 Protocol&#xff1a;负责提供者和消费者之间的协议交互数据 Service&#xff1a;真实的业务服务信息&#xff0c;可以理解成接口和实现 Container&#xff1a;Dubbo的运行环境…

小规模容器编排使用Docker Swarm不香么,用个锤子的kubernetes

文章目录一、Docker Swarm是什么&#xff1f;二、Swarmkit和Swarm Mode是什么&#xff1f;三、Docker Swarm的核心设计四、Docker Swarm安装部署4.1、初始化Swarm节点14.2、新节点加入Swarm集群4.3、使用swarm部署服务4.4、swarm集群管理一、Docker Swarm是什么&#xff1f; D…

用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

手动挡科目三道路驾驶技能考试及理论考试要点

路线每个驾校的科目三路线可能都不一样&#xff0c;但是考点基本差不多。我当时选的驾校是北京公交驾校&#xff0c;路线图如下&#xff1a;考试要点在考试大厅等待叫号&#xff0c;一般大屏都会公布xxx学员找xx号车考试&#xff0c;这边白色车是手动挡&#xff0c;灰色车是自动…

智慧停车怎么实现的,停车场寻车是怎么实现的

智慧停车怎么实现的&#xff1f;随着汽车快速发展&#xff0c;停车场行业也面临着积极发展&#xff0c;由于停车场面积大&#xff0c;找到自己想去的停车位就成了一个大问题。而停车场地图可以根据地点、距离等给出最佳的路线规划&#xff0c;引导司机快速的到达目标停车位。 …

网络编程初探

1、概念 计算机和计算机之间通过网络进行数据传输 常见的软件构架&#xff1a;CS架构和BS架构 通信软件构架的优缺点 CS&#xff1a;客户端服务端模式需要开发客户端 BS&#xff1a;浏览器服务端模式不需要开发客户端 CS: 适合定制化的办公类软件如&#xff1a;IDEA&…

css 使用blur,实现背景色高斯模糊,但不影响背景上的内容

实现效果 实现原理 1.filter&#xff1a;blur() 2.伪元素设置&#xff0c;不影响子元素显示 <!-- 库位使用率 --><div class"bkPart statusPart"><div class"co-title">库位使用率</div><div class"pickPos"><…

游戏开发之Unity2021熟悉基本工具

接上一节通用渲染管线项目搭建 导入天空盒素材&#xff1a;在窗口中选择资源商店后会弹出下面的图片&#xff0c;在资源商店中找到我们想要的天空盒素材&#xff0c;将素材在unity中打开&#xff0c;如下面的第二幅图中就是我选择的天空盒素材&#xff0c;在这里可能会遇到一个…

Pandas 2.0正式版发布: Pandas 1.5,Polars,Pandas 2.0 速度对比测试

Pandas 2.0正式版在4月3日已经发布了&#xff0c;以后我们pip install默认安装的就是2.0版了&#xff0c;Polars 是最近比较火的一个DataFrame 库&#xff0c;最近在kaggle上经常使用&#xff0c;所以这里我们将对比下 Pandas 1.5&#xff0c;Polars&#xff0c;Pandas 2.0 。看…

redis杂谈之部分重同步的实现

背景&#xff1a; 部分重同步则用于处理断线后重复制情况&#xff1a;当从服务器在断线 后重新连接主服务器时&#xff0c;如果条件允许&#xff0c;主服务器可以将主从服务器连 接断开期间执行的写命令发送给从服务器&#xff0c;从服务器只要接收并执行这 些写命令&#xff…

[ 云计算 | Azure ] Chapter 05 | 核心体系结构之管理组、订阅、资源和资源组以及层次关系

本文主要对如下内容进行讲解&#xff1a;Azure云计算的核心体系结构组件中的&#xff1a;资源、订阅和资源组&#xff0c;以及了解 Azure 资源管理器 (ARM) 如何部署资源。 本系列已经更新文章列表&#xff1a; [ 云计算 | Azure ] Chapter 03 | 描述云计算运营中的 CapEx 与…

数据结构-插入排序

一.概要 插入排序是一种基于比较的排序算法&#xff0c;其基本思想是将待排序的元素插入到已排序的序列中&#xff0c;形成新的有序序列。 插入排序算法的过程如下&#xff1a; 将待排序序列分为两部分&#xff1a;已排序部分和未排序部分&#xff1b; 初始时&#xff0c;已…

一、源码详解(第一阶段)

入口 # < cpu\arm920t\start.S > .globl _start _start: b start_code ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq _undefined_instruction: .wor…

面向对象编程(进阶)5:关键字:super

目录 5.1 super的理解 在Java类中使用super来调用父类中的指定操作&#xff1a; 注意&#xff1a; 5.2 super的使用场景 5.2.1 子类中调用父类被重写的方法 举例&#xff1a; 总结&#xff1a; 方法前面没有super.和this. 方法前面有this. 方法前面有super. 5.2.2 子…

【虹科案例】虹科脉冲发生器在读出电子测试中的应用

大型物理应用中的读出测试 在大型物理实验中&#xff0c;尽管主要作用是观察物理现象的探测器&#xff0c;但非常高效的读出电子采集链同样重要&#xff0c;因为它可以收集和存储许多实时数据。读出链基于分层树结构&#xff0c;其中最低层位于探测器附近&#xff0c;它使用通…
最新文章