wemos+mptt+mysql实现环境光照强度上传数据库

本文主要是介绍wemos+mptt+mysql实现环境光照强度上传数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Wemos+云+数据库MySQL

一、项目硬件准备
1、一块wemos开发板

在这里插入图片描述

2、一个光照传感器

在这里插入图片描述

3、若干杜邦线

二、项目软件准备
1、一个云服务器+创好的MySQL(安装宝塔可快速搭建数据库)
2、mqtt x测试软件

三、项目开始
1、软件部分
(1)安装宝塔:https://www.bt.cn/download/linux.html
注:安装适合自己的版本
(2)在宝塔开放相关端口
这里开放了18083、1883、8080等端口,其中18083用来打开EMQ X Dashboaord,1883用来mqtt协议通信。

(3)创建MySQL数据库

在这里插入图片描述

(4)建立相关数据库的表(我这里主要是上传关照强度的值)

在这里插入图片描述

相关的SQL代码:

CREATE TABLE `sun_test` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`up_timestamp` timestamp NULL DEFAULT NULL,`client_id` varchar(32) DEFAULT NULL,`sun` float unsigned DEFAULT NULL,PRIMARY KEY (`id`),KEY `up_timestamp_client_id` (`up_timestamp`,`client_id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4;

1.2、进入云平台的安全组开放相关端口(注:主要是因为端口开放不了,所以只能在这里开放)
这一步可有可无,开具体的运行情况,如果出现发送数据后接收不到,或者链接不上mqtt x等等,可以考虑是端口没有开放问题。

在这里插入图片描述

1.3、进入EMQ X Dashboaord(你的ip:18083,即可进入emqx的mqtt代理网站),同时创建好相关的资源和规则。
(1)下载安装EMQ X Dashboaord:https://www.emqx.io/downloads
在这里插入图片描述

(2)相关的Linux指令:
1.Download emqx-ee-ubuntu20.04-4.2.5-x86_64.zip SHA256

wget https://www.emqx.io/downloads/enterprise/v4.2.5/emqx-ee-ubuntu20.04-4.2.5-x86_64.zip
2
Install
unzip emqx-ee-ubuntu20.04-4.2.5-x86_64.zip
3
Run
./bin/emqx start

1.3.1、安装好EMQ X Dashboaord之后,进行资源和规则设置
(3)资源
在这里插入图片描述

(4)规则

在这里插入图片描述

相关的SQL代码

SELECT timestamp as up_timestamp, clientid as client_id, payload.sun as sun  FROM  "testtopic/sun" 

在这里插入图片描述
在这里插入图片描述

相关代码:

insert into sun_test(up_timestamp, client_id, sun) values (FROM_UNIXTIME(${up_timestamp}/1000), ${client_id}, ${sun})
1
1.4、利用mqtt x进行测试
(1)下载软件安装:https://mqttx.app/cn/

在这里插入图片描述

(2)进行相关的配置(分为连接服务器和创建topic)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5、测试的数据上传效果
(1)数据库

在这里插入图片描述

在这里插入图片描述

2、硬件部分
2.1硬件接线
wemos 光照强度传感器
3.3v ------------------ vcc
gnd ------------------ gnd
A0 ------------------ data
在这里插入图片描述

2.2相关代码
(1)arduino代码


#include <ESP8266WiFi.h>
#include <PubSubClient.h>// Update these with values suitable for your network.//连接wifi
const char* ssid = "602iot";
const char* password = "18wulian";
const char* mqtt_server = "xxx.xxx.xxx.xxx";//云服务器ip//自行添加的订阅
const char* pubTopic = "testtopic/sun";WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];#define Lux_Pin A0void setup_wifi() {delay(10);// We start by connecting to a WiFi networkSerial.println();Serial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}randomSeed(micros());Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());
}void callback(char* topic, byte* payload, unsigned int length) {Serial.print("Message arrived [");Serial.print(topic);Serial.print("] ");for (int i = 0; i < length; i++) {Serial.print((char)payload[i]);}Serial.println();// Switch on the LED if an 1 was received as first characterif ((char)payload[0] == '1') {digitalWrite(BUILTIN_LED, LOW);   // Turn the LED on (Note that LOW is the voltage level// but actually the LED is on; this is because// it is active low on the ESP-01)} else {digitalWrite(BUILTIN_LED, HIGH);  // Turn the LED off by making the voltage HIGH}}void reconnect() {// Loop until we're reconnectedwhile (!client.connected()) {Serial.print("Attempting MQTT connection...");// Create a random client IDString clientId = "ESP8266Client-";clientId += String(random(0xffff), HEX);// Attempt to connectif (client.connect(clientId.c_str())) {Serial.println("connected");// Once connected, publish an announcement...client.publish(pubTopic, "hello world");// ... and resubscribeclient.subscribe("inTopic");} else {Serial.print("failed, rc=");Serial.print(client.state());Serial.println(" try again in 5 seconds");// Wait 5 seconds before retryingdelay(5000);}}
}void setup() {pinMode(BUILTIN_LED, OUTPUT);     // Initialize the BUILTIN_LED pin as an outputpinMode(Lux_Pin, INPUT);Serial.begin(115200);setup_wifi();client.setServer(mqtt_server, 1883);client.setCallback(callback);
}void loop() {if (!client.connected()) {reconnect();}client.loop();long now = millis();if (now - lastMsg > 2000) {lastMsg = now;snprintf (msg, 50, "{\"sun\": \"%d\"}", analogRead(Lux_Pin));//要上传的数据,这里是sunSerial.print("Publish message: ");Serial.println(msg);client.publish(pubTopic, msg);}
}

2.3效果展示
(1)硬件运行效果
在这里插入图片描述
(2)mqqtx
在这里插入图片描述
(3)规则监测

在这里插入图片描述

(4)数据库情况
在这里插入图片描述

3.总结
通过这个项目可以了解到,运用wemos、云数据库MySQL、mqtt协议可以实现把采集到的光照强度上传到MySQL,其中涉及emqx的资源和规则创建、mqttx的测试和最后的硬件实现数据上传,数据格式JSON。

这篇关于wemos+mptt+mysql实现环境光照强度上传数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510309

相关文章

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代