使用 Socket.io 实现实时显示机房温度监控

介绍

在机房中,监控机房温度变化是非常必要的。本文将介绍如何使用 Socket.io 实现机房温度监控的实时显示。

Socket.io 简介

Socket.io 是一个实现网络套接字的 JavaScript 库,它供客户端和服务器端使用。使用 Socket.io 可以轻松地实现实时通信功能,例如聊天、多用户协作和实时更新等。

实现

我们将使用 Raspberry Pi 3B 和 DHT11 温度样板对机房温度进行读取并传输到服务器,服务器再使用 Socket.io 将数据实时从后台推送到客户端并显示。

步骤一:启动服务器

首先,我们需要启动一个 Node.js 服务器,并安装 Socket.io。可以使用以下命令创建一个新项目:

----- ------------
-- ------------
--- ----

根据提示完成项目初始化后,使用以下命令安装依赖:

--- ------- ------ ------- ---------

在项目根目录下,创建一个名为 server.js 的文件,并添加以下代码:

----- ------- - -------------------
----- --- - ----------
----- ---- - ----------------------------------
----- -- - ---------------------------
----- ---- - ----------------
----- ------ - ---------------------------

------------------------------------------- ------------

------------------- -------- -- -
  -------------- ---- -------------
---

----------------- -- -- -
  ------------------- --------- -- ---- ----------
---

上述代码做了以下几件事:

  1. 导入 Express 和 Socket.io 库;
  2. 创建一个 Express 应用程序和 HTTP 服务器;
  3. 创建一个 Socket.io 实例并将其附加到服务器;
  4. 添加一个中间件响应静态页面请求;
  5. 监听客户端连接事件。

使用以下命令启动服务器:

---- ---------

步骤二:读取温度传感器数据

接下来,我们需要读取温度传感器数据。请注意,以下示例针对 DHT11 温度传感器。

可以使用以下命令安装 node-dht-sensor

--- ------- ------ ---------------

此外,我们还需要为传感器设置 GPIO 引脚。

在 Raspberry Pi 上,需要安装 wiringpi 库。

---- ------- ------- --------

在 Raspberry Pi 的命令行中,运行以下命令以查看已安装库的版本:

---- --

接下来,在项目根目录下,创建名为 temperature.js 的文件,添加以下代码:

----- ------ - ---------------------------

----- --------------- - -- -- -
  ----- ---------- - --- -- ----- 
  ----- --- - -- -- ----- 
  ----- ------ - ----------------------- -----

  -- -------------- -
    ------ -----
  -

  ----- ----------- - ------------------------------
  ------ ------------
--

------------------------------ - ----------------

上述代码做了以下几件事:

  1. 导入 node-dht-sensor 库;
  2. 创建一个函数,读取温度传感器返回温度(如果读取失败,则返回 null)。

此时,我们已准备好了服务器的套接字和读取温度数据的模块。

步骤三:将数据发布到客户机

我们来修改 server.js 文件以便于将数据实时发布到客户机,我们需要在服务器和客户端之间创建一个套接字连接并将读到的数据实时发布到前端。

请参考以下 server.js 文件的修改:

----- ------- - -------------------
----- --- - ----------
----- ---- - ----------------------------------
----- -- - ---------------------------
----- ---- - ----------------
----- - --------------- - - -------------------------

------------------------------------------- ------------

------------------- -------- -- -
  -------------- ---- -------------
  
  -------------- -- -
    ----- ----------- - ------------------
    
    -- ------------- -
        -------------------------- -------------
    -
  -- ------
---

----------------- -- -- -
  ------------------- --------- -- ---- ----------
---

上述代码作了以下几件事情:

  1. 增加了温度读取模块;
  2. 添加了服务器和客户端之间的套接字连接;
  3. 使用 setInterval 定时读取温度数据;
  4. 将数据实时发布到客户机。

下面,我们来创建一个前端显示温度数据的页面。在项目根目录下创建一个名为 public 的目录,然后在该目录下创建名为 index.html 的文件并添加以下代码:

--------- -----
----- ----------
------
  ----- ----------------
  ------------------ ---------------
-------
------
  --------------- ------------
  -------- ------------------------- -----------
  
  ------- ---------------------------------------
  --------
    --- ------ - -----
    ------------------------ --------------------- -
      ------------------------------------------------ - ------------
    ---
  ---------
-------
-------

上述代码做了以下几件事:

  1. 显示了温度数据的html页面;
  2. 在body内用id为"temperature"的span标签来显示温度;
  3. 导入 Socket.io 客户端库;
  4. 创建一个 Socket.io 实例连接到服务器;
  5. 监听服务器推送的 temperature 事件,并将其值显示在前端。

现在,我们已经完成了机房温度检测实时推送,启动应用程序并通过浏览器访问 http://localhost:3000,就可以看到温度随着时间变化而实时显示在页面上。

总结

本文介绍了如何使用 Socket.io 实现机房温度监控实时显示。我们了解了如何在服务器和客户端之间创建一个套接字连接,如何读取温度传感器数据,并将数据实时发布到客户机。此外,我们还创建了一个简单易用的前端页面以展示温度数据。希望本文对读者在实际开发中有所帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64fd79e795b1f8cacdcdbdff


猜你喜欢

  • ECMAScript 2018 新特性:正则表达式反向断言

    ECMAScript 2018 新特性:正则表达式反向断言 在 ECMAScript 2018 中,引入了一项新特性:正则表达式反向断言。这项新特性使得我们能够更加方便地进行正则表达式匹配,提高了正则...

    1 年前
  • 在使用 Tailwind 时,如何组织 CSS 代码?

    什么是 Tailwind Tailwind 是一种基于预定义的 CSS 类,帮助开发者快速搭建 UI 界面的框架。Tailwind 提供了大量的样式类,这些类组合起来可以快速实现 UI 设计中的各种样...

    1 年前
  • 使用 Webpack 构建 React 项目

    在前端开发中,构建工具的重要性不言而喻,它们可以帮助我们自动化构建、优化性能、管理模块等。而有了 React 之后,Webpack 成为了很多 React 项目中使用的主要构建工具。

    1 年前
  • RxJS 应用之实现用户搜索功能

    随着互联网的发展,用户搜索功能已成为网站和应用程序中重要的功能。搜索功能的实现需要使用异步编程技术来实现流畅响应用户操作,并能够处理用户输入的不确定性和模糊性。在这个方向上,RxJS 是最合适的工具之...

    1 年前
  • 如何使用 Custom Elements 在 Web 应用中实现模块化开发

    随着 Web 应用的不断发展,作为前端开发者,我们需要更加高效和可维护的方式来构建 Web 页面。这时,Custom Elements (自定义元素)便成为了我们的一个重要选择。

    1 年前
  • ESLint 无法校验 ES6 中 Map 和 Set 的语法

    ESLint 无法校验 ES6 中 Map 和 Set 的语法 在前端开发中,为了减少代码出错和规范代码风格,我们通常使用 ESLint 对 JavaScript 代码进行校验。

    1 年前
  • ES11 (2020) 中的 Math 新增特性:如何优化数学计算?

    在前端开发中,数学计算是一个不可避免的部分。ES11 (2020) 中的 Math 新增特性可以帮助我们更加高效地进行数学计算,本文将介绍 ES11 中 Math 的新增特性,包括几个函数和一个常量,...

    1 年前
  • 在使用 Express.js 时如何实现 Token 认证?

    在 Web 应用程序中,Token 认证是一种非常常见的身份验证方式。当用户登录成功后,应用程序会为其颁发一个 Token,并在后续的请求中使用这个 Token 来验证用户身份。

    1 年前
  • 如何在 PM2 中使用 Linux 日志记录

    在前端开发中,使用 PM2 进行进程管理是很常见的。PM2 不仅可以让开发者对进程进行监控和管理,还可以通过日志记录对进程进行更细致的监控和分析。本文将重点介绍如何在 PM2 中使用 Linux 日志...

    1 年前
  • Headless CMS 可以改进 SEO 排名吗?

    随着互联网的不断发展,前端技术的重要性越来越受到关注。而在前端技术中,SEO (Search Engine Optimization,搜索引擎优化)更是非常重要的一项技术,它可以让我们的网站在搜索引擎...

    1 年前
  • 如何处理 PWA 应用在安卓上无法更新的问题

    如何处理 PWA 应用在安卓上无法更新的问题 逐渐流行的 PWA 应用带来了许多好处,例如使 Web 应用程序更快、更可靠,可以以离线模式运行,提供了接近原生体验的快速响应速度,但是有一个常见的问题是...

    1 年前
  • Vue.js 之剖析 diff 原理及其优化策略

    在前端开发中,Vue.js 是一款非常流行的 JavaScript 框架。它采用了虚拟 DOM(Virtual DOM)技术,使得数据的变化不需要重新渲染整个页面,从而提高了页面的性能。

    1 年前
  • 如何利用 Enzyme 对 React 组件进行样式测试?

    React 是一种非常流行的前端开发框架,它简化了 UI 组件的管理和数据流的控制。然而,在开发过程中,我们经常需要测试 UI 组件的样式是否正确。在这种情况下,就要用到 Enzyme,它是一个 Re...

    1 年前
  • 为什么要使用 SSE 而不是 WebSocket 来实现服务器推送?

    在前端开发中,服务器推送是一个非常重要的功能,可以让客户端实时获取服务器端的更新数据,从而提高用户体验,减少网络延迟。目前实现服务器推送的两种主要技术是 SSE 和 WebSocket。

    1 年前
  • 如何在 Hapi 框架中使用 TypeORM?

    在现代 Web 开发中,后端框架的选择多种多样,其中 Hapi 框架是一种非常流行的 Node.js 框架。它具有可扩展性、插件化、易于测试、强大的路由系统等特点。

    1 年前
  • 如何使用 Cypress 和 Puppeteer 实现高效数据驱动测试

    在前端开发中,测试是非常重要的一部分。如何实现高效的测试一直是开发人员们探索的方向。本文将介绍如何使用 Cypress 和 Puppeteer 实现高效的数据驱动测试,包含详细的内容和示例代码,希望对...

    1 年前
  • Duilib+MongoDB 实现 Windows 采集系统

    Duilib+MongoDB 实现 Windows 采集系统 在如今信息爆炸的时代,鱼龙混杂的信息已经难以辨认真假。为了获取有价值的信息,采集系统已经成为很多企业不可或缺的一部分。

    1 年前
  • 如何使用 ES12 中的 Record 和 Tuple?

    在前端开发中,我们经常需要使用 JavaScript 来操作数据,但是纯 JavaScript 对于数据结构的类型约束比较弱,也无法提供静态类型检查。为了解决这个问题,ES12 中新增了两个数据类型,...

    1 年前
  • ECMAScript 2016 中的 Array.prototype.sort( ) 方法

    ECMAScript 2016 是 JavaScript 的一次更新版本。该版本包括了一些很有用的特性和改进,其中一个显著的改进是对 Array.prototype.sort( ) 方法的优化。

    1 年前
  • 相比于 REST,GraphQL 的优势在哪里?

    相比于 REST,GraphQL 的优势在哪里? RESTful API(Representational State Transfer)是一种基于HTTP协议设计的一种常用的API设计风格。

    1 年前

相关推荐

    暂无文章