码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【NodeJs-5天学习】第四天存储篇④ ——基于MQTT的环境温度检测,升级存储为mysql


    【NodeJs-5天学习】第四天存储篇④ ——基于MQTT的环境温度检测,升级存储为mysql

      • 1. 前言
      • 2. 服务器代码
        • 2.1 配置MySQL服务器
        • 2.2 NodeJs服务器代码
          • 2.2.1 对接temp_check 表
          • 2.2.2 mqtt服务改动 —— topic_router
      • 3. ESP8266代码
      • 4. 测试效果
      • 4.总结

    面向读者群体

    • ❤️ 电子物联网专业同学,想针对硬件功能构造简单的服务器,不需要学习专业的服务器开发知识 ❤️
    • ❤️ 业余爱好物联网开发者,有简单技术基础,想针对硬件功能构造简单的服务器❤️

    技术要求

    • 有HTML、CSS、JavaScript基础更好,当然也没事,就直接运行实例代码学习

    专栏介绍

    • 通过简短5天时间的渐进式学习NodeJs,可以了解到基本的服务开发概念,同时可以学习到npm、内置核心API(FS文件系统操作、HTTP服务器、Express框架等等),最终能够完成基本的web开发,而且能够部署到公网访问。

    学习交流群

    • NodeJs物联网五天入门学习之旅(搜索:729040020)

    🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝

    1. 前言

    本篇基于

    • 【NodeJs-5天学习】第三天实战篇③ ——基于MQTT的环境温度检测

    的基础上,会做升级,更加符合实际技术选型。

    • 数据存储从文件改为mysql数据库

    所以本篇更偏向于差异点,其他知识直接查看基础篇,不会从头到尾重复一遍。

    2. 服务器代码

    服务器包括两大块:

    • 配置MySQL服务器
    • NodeJs服务器开发

    2.1 配置MySQL服务器

    初学者先简单学习:

    • 【NodeJs-5天学习】第四天存储篇① ——安装使用mysql 8.0
    • 【NodeJs-5天学习】第四天存储篇② ——NodeJs连接操作mysql 8.0

    到这一步,我们认为已经建立了一个叫做nodejs的数据库。
    在这里插入图片描述
    我们通过DBeaver建立一张新表,表名为:

    • temp_record表名

    表列包括:

    • uid 设备编号 bigint unsigned
    • temp 温度值 float
    • time 测温时间 timestamp
      在这里插入图片描述

    构建一个索引uid:

    • uid 作为列 uid的索引
      在这里插入图片描述

    有兴趣的同学了解一下mysql的数据类型

    • https://www.runoob.com/mysql/mysql-data-types.html
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    最终生成的DDL:
    在这里插入图片描述

    执行保存生成新表:
    在这里插入图片描述

    在这里插入图片描述

    可以得到一张新的表:
    在这里插入图片描述

    到这一步,我们的表已经创建成功,接下来就是nodejs方面的业务编写。

    2.2 NodeJs服务器代码

    在这里插入图片描述

    2.2.1 对接temp_check 表
    // 第一步:引入mysql模块
    let mysql = require("mysql");
    
    // 连接参数
    const db_config={
        host     : 'localhost', // 主机地址
        user     : 'root',      // 用户名
        password : '123456',    // 用户密码
        database : 'nodejs',    // 数据库名
        port     : 3306,         // 端口号,默认3306 
        timezone : 'utc' // 解决时区时间统一的问题
    }
    
    // 第二步:创建数据库连接池,这里参数会很多
    let pool=mysql.createPool(db_config)
    
    // 第三步:正式发起数据库连接
    pool.getConnection(function(err,connect){//通过getConnection()方法进行数据库连接
        if(err){
            console.log(`mysql链接失败${err}`);
        }else{
        }
    })
    
    // 插入打卡记录
    function insertRecord(id,temp,time) {
      // 第三步:正式发起数据库连接
      pool.getConnection(function(err,connect){//通过getConnection()方法进行数据库连接
        if(err){
            console.log(`mysql链接失败${err}`);
        }else{
            let insertSql2 = `insert into temp_record(uid,temp,time) values (${id},'${temp}','${time}')`
            console.log(insertSql2)
            connect.query(insertSql2,function(err,result){
                if(err){
                    console.log(`SQL error:${err}`)
                }else{
                    console.log('插入成功');
                    connect.release();//释放连接池中的数据库连接
                }
            });
        }
      })
    }
    
    module.exports = {
        insertRecord
    }
    
    

    重点关注sql语句:

    insert into temp_record(uid,temp,time) values (${id},'${temp}','${time}')
    
    • uid 设备编号
    • temp 当前测量温度
    • time 当前测量时间
    2.2.2 mqtt服务改动 —— topic_router
    mqttTopic.use('SysThingPropertyPost',USE_JSON, (payload)=>{
        console.log(payload)
        if (payload.params.temp) {
            ds18b20Handler.setCurrentTemp(payload.id, payload.params.temp)
            // 往数据库插入记录 
            mysql.insertRecord(payload.id, payload.params.temp, time.getCurrentDateTime())
        }
     })
    

    把之前存储为文件改成存到mysql表里面。

    3. ESP8266代码

    保持和 【NodeJs-5天学习】第三天实战篇③ ——基于MQTT的环境温度检测 不变

    4. 测试效果

    在这里插入图片描述

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

    至此,一个简单的基于MQTT的环境温度检测系统就可以了。

    4.总结

    篇④结合ESP8266来开发简单物联网应用——获取多个ds18b20节点的温度,上报到本地部署的mqtt服务器,同时启动express服务器,提供一个可视化页面查看曲线图。麻雀虽小五脏俱全,初学者需要理解数据库存储操作以及对接QQ、服务请求等等对应的知识点并加以实际应用。

  • 相关阅读:
    MYSQL和MongoDB的分析
    【软件工程导论】1.软件过程模型
    5.覆盖增强技术——PUCCH&PUSCH
    动态树的第2大值
    qt hiRedis封装使用
    mysql中一个字段查看有没有重复的值用DISTINCT函数,查看两个字段有没有重复的值用那个函数实例?
    不愧是阿里架构师,吐血更新笔记,这应该是对“Spring家族”最完美的诠释了!
    12.面试题——Spring Boot
    推荐2款开源、美观的WinForm UI控件库
    进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)
  • 原文地址:https://blog.csdn.net/weixin_44614230/article/details/127100338
  • 最新文章
  • Agent出现LLM因为历史工具调用消息而误解工具调用方式的问题
    [实例] SPI接口的ADC芯片全通道纯硬件驱动——基于HAL库和TLA2518芯片
    龙芯2k0300 - 智能车走马观碑组目标检测算法
    深度学习进阶(二十)Transformer-XL
    10 个示例快速入门 Go-Spring|v1.3.0 正式发布
    PyTorch KernelAgent 源码解读 ---(1)--- 原理
    洛谷-P16434 [APIO 2026 中国赛区] 蛋糕 题解
    有关认知感受的论文(娱乐)
    Llamaindex框架
    本地大模型推理实战
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号