硬件采集数据到云端数据库(ESP8266+MQTT+云服务器+MySQL )

本文介绍了一种利用ESP8266和DHT11传感器采集环境数据,通过EMQ X Cloud规则引擎将数据保存到云服务器上的MySQL数据库的方法。详细步骤包括硬件连接、代码实现、EMQ X Cloud规则配置以及使用Nevicat进行数据管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:之前所学知识均是简单的使用硬件采集数据上传到云服务器,并没有实现数据存储的系统化管理。本次实验利用ESP8266+DHT11实现数据采集,再随机利用EMQ X Cloud 规则引擎保存数据到 MySQL(云服务器内创建数据库并成功连接),最后使用Nevicat实现数据的系统存储与管理;
具体实现步骤如下:

  1. 采集数据
  2. EMQ X Cloud 规则引擎保存数据到 MySQL
  3. 使用Nevicat实现数据存储

第一部分:采集数据
硬件准备:ESP8266、DHT11、面包板、跳线若干
硬件接线图:在这里插入图片描述
实际连接图:
在这里插入图片描述

代码实现:
//首先我们将导入 ESP8266WiFi 和 PubSubClient 库,ESP8266WiFi 库能够将 ESP8266 连接到 Wi-Fi 网络,PubSubClient 库能使 ESP8266 连接到 MQTT 服务器发布消息及订阅主题
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include “DFRobot_DHT11.h”
设置 Wi-Fi 名称和密码,以及 MQTT 服务器连接地址和端口
// WiFi
const char *ssid = “602iot”; // Enter your WiFi name
const char *password = “18wulian”; // Enter WiFi password
//设置 MQTT Broker 信息
// MQTT Broker
const char *mqtt_broker = “gb779e9e.cn.emqx.cloud”;
const char *topic = “zhong/a”;
const char *mqtt_username = “zyl”;
const char *mqtt_password

### STM32 连接云端数据库教程 #### 设备与组件介绍 STM32作为微控制器,在物联网(IoT)应用中扮演着重要角色。通过集成Wi-Fi模块如ESP8266,可以实现STM32与互联网之间的连接[^1]。 #### 开发环境配置 对于开发环境而言,除了基本的硬件设置外,还需要准备相应的软件工具链来支持编程工作。这包括但不限于IDE(如Keil MDK)、库文件以及驱动程序等资源。此外,考虑到后续的数据处理需求,建议采用具备良好扩展性的语言和技术框架来进行项目构建,比如嵌入式C++用于编写固件逻辑[^2]。 #### 实现方案概述 为了使STM32能够有效地向云端发送数据或将接收到来自网络的信息保存至远程数据库内,通常会采取如下几种方式之一: - **直接HTTP请求**:利用轻量级TCP/IP协议栈LwIP配合HTTPS/RESTful API接口完成简单的GET/POST操作; - **MQTT消息队列遥测传输协议**:借助专门的消息代理服务Broker建立稳定可靠的双向通讯通道; - **Websocket长链接机制**:保持持久化Socket连接以便即时推送通知给客户端应用程序; 鉴于MQTT具有较低带宽占用率且适合间歇性在线场景的特点,在此推荐优先考虑使用该方法[^4]。 #### MQTT协议实践指南 以下是具体实施过程中可能涉及到的关键环节及其对应的操作说明: ##### 安装依赖项和服务端部署 确保目标平台上已成功安装Mosquitto或其他兼容版本的MQTT Broker实例,并开启监听功能等待来自外部节点发起订阅/发布动作。与此同时,还需准备好MySQL这样的关系型数据库管理系统用来记录历史事件日志或状态变更详情[^3]。 ##### 编写MCU侧代码片段 下面给出了一段简化版的例子展示怎样让STM32通过串口桥接到ESP8266进而接入公网中的某个特定主题下参与对话交流过程: ```c++ #include "PubSubClient.h" #include <WiFiEsp.h> // WiFi credentials. const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // MQTT Server details. const char* mqtt_server = "broker_address"; // e.g., test.mosquitto.org int mqtt_port = 1883; WiFiEsp wifi; PubSubClient client(wifi); void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); /* Your WiFi configuration code here */ } bool connect_mqtt_broker(){ if (client.connect("esp8266_client")) { Serial.println("Connected to broker"); return true; } else { Serial.print("Failed, rc="); Serial.print(client.state()); return false; } } void reconnect() { while (!connect_mqtt_broker()) { delay(5000); } } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (unsigned int i=0;i<length;i++) { Serial.print((char)payload[i]); } Serial.println(); } void setup() { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); Serial.begin(9600); setup_wifi(); client.setServer(mqtt_server,mqtt_port); client.setCallback(callback); } void loop() { if(!client.connected()){ reconnect(); } client.loop(); long now = millis(); if(now % 10000 == 0){ String message="Hello from ESP8266!"; client.publish("test/topic",message.c_str()); } } ``` 这段Arduino风格的源码主要完成了以下几个方面的工作: - 初始化Wi-Fi连接参并尝试登录指定热点; - 构建指向远端服务器地址的对象句柄; - 注册回调函以响应收到的新消息事件; - 循环检测当前是否处于离线模式,必要时重新认证身份; - 周期性地向外广播测试字符串验证整个链条畅通无阻。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值