前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在web浏览器上显示室内温度(nodeJs+arduino+socket.io)

在web浏览器上显示室内温度(nodeJs+arduino+socket.io)

作者头像
用户1749219
发布于 2018-05-16 03:39:58
发布于 2018-05-16 03:39:58
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

上次的nodejs操作arduino入门篇中实现了如何连接arduino。这次我们来实现通过arduino测量室内温度并在浏览器上显示出来。

【所需材料】

硬件:LM35温度传感器,arduino uno板,面包板,若干导线。

软件:socket.io , cylonJs , express等

【准备-硬件部分】

1、首先当然是连接电路板:

注意这个ANALOG IN是传感器的输入,就是读取温度的入口。

看看我连的:

2、然后按照 nodejs操作arduino入门篇先连接上arduino试试吧。

【准备-软件部分】

1、安装socket.io,express,package.json中这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "name": "robot",
  "version": "1.0.0",
  "description": "robot",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "yourname",
  "license": "ISC",
  "devDependencies": {
    "cheerio": "^0.22.0",
    "cylon-firmata": "*"
  },
  "dependencies": {
    "cylon-firmata": "^0.24.0",
    "cylon-gpio": "^0.29.0",
    "cylon-i2c": "^0.26.1",
    "express": "^4.14.0",
    "socket.io": "^1.5.0"
  }
}

执行npm install安装依赖包

2、编写主文件,就是读取温度,在main.js中写入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var Cylon = require('cylon');
var express = require('express');
var http = require('http');
var app = express();
var server = http.Server(app);
var io = require('socket.io')(server);
var port = 3000;  
app.use(express.static(__dirname+'/'));//设置静态文件目录

app.get('/',function(req,res){
      res.sendFile('index.html');//渲染一个html文件,在这个html文件中来展示温度
});


server.listen(port,function(){
  console.log("正在监听%d端口...",port);
});

Cylon.api('http');
Cylon.robot({
  connections: {
    arduino: { adaptor: 'firmata', port: '/dev/cu.wchusbserial1420' }
  },

  devices: {
    sensor: { driver: 'analog-sensor', pin: 2, lowerLimit: 100, upperLimit: 900 }//2号analog in口,后面是最低和最高读取值
  },

  work: function(my) {
      var analogValue = 0;
      io.on('connection', function(socket){
        every((1).second(), function() {//频率是1Hz,就是1秒读取一次温度
          analogValue = my.sensor.analogRead();//读取传感器数值
          io.emit('news', (analogValue*500/1023).toFixed(1));//analogValue*500/1023是将传感器数值转换成摄氏度。取一位小数
          //用socket.io把数值绑定在news这个名字上,前端也会用这个名字来读取这个值
        });
        console.log('a user connected');
        socket.on('disconnect', function(){
          console.log('user disconnected');
        });
    });
  }
}).start();

3、前端代码--index.html:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>温度</title>
    <script src="http://cdn.bootcss.com/jquery/2.2.2/jquery.min.js"></script>
    <link rel="stylesheet" href="./css/index.css">
</head>
<body>
    <div class="temperature">
        <div class="t-val">
            当前温度是:<span id="t">--</span>
        </div>
    </div>
</body>
<script src="./lib/socket.io.js"></script>
<script>
  var socket = io();
  socket.on('news',function(msg){
      $('#t').text(msg+'\'C');
  });
</script>
</html>

抱歉上面花屏了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var socket = io();
  socket.on('news',function(msg){
      $('#t').text(msg+'\'C');
  });

然后执行node main.js,在浏览器中输入localhost:3000应该就能看到效果,再贴上css代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
html,body{
    margin: 0;
    padding: 0;
    background-color: #242424;
}
.temperature{
    color: white;
    width: 400px;
    height: 400px;
    position: absolute;
    margin: auto;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    text-align: center;
    line-height: 400px;
}
.t-val {
    font-size: 40px;
    font-family: KaiTi;
}

然后看执行效果:页面刷新之后我就用手指捏住传感器,所以温度上升,松开又下降了。

然后我去看了看公司的空调设置温度是25.5(传感器一开始显示的是25.4),有图为证:

目前只是实现了在本地,之后我再研究研究怎么连接到服务器,初步的思路有:

1、使用树莓派,将arduino连接树莓派,再在树莓派上搭建服务器,再用花生棒或者其他端口映射的方法连接到公网,这样就能在公网上看到数据。

2、通过Ethernet扩展板实现网络远程访问

3、使用 wifi模块,再连接路由器实现网络访问(网上说的是推荐 esp8266模块,经济实惠)

4、GPRS模块,这个可以让arduino移动到任何地方,但是感觉如果要做到一直测的话,电话卡的流量得很多啊,这个我也只是瞎猜,没用过。

恩,差不多就这些了,过程很简单,目前我需要做的就是慢慢上手,争取用做一些有意思的东西出来。

最后说一下硬件的大概价格吧(没仔细记价格):

arduino30多块,面包板好像5块吧,线2块钱足够了,LM35传感器2块5好像,也就是说加起来一共不到50块,感兴趣的可以买来玩玩。

有问题或建议欢迎留言。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-10-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)
本文介绍了如何利用 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯。首先介绍了 WebSocket 的概念和原理,然后阐述了利用 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯的具体步骤。最后通过一个示例展示了如何在前端实现该功能。
HT for Web
2018/01/03
1.5K0
基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)
Socket的讲解
伙伴们,如果你觉得我写的文章对你有帮助就给zayyo点一个赞👍或者关注➕都是对我最大的支持。当然你也可以加我微信:IsZhangjianhao,邀你进我的前端学习交流群,一起学习前端,成为更优秀的工程师~
zayyo
2023/11/18
2201
socket.io实践干货
一、前言 socket.io 实现了实时双向的基于事件的通讯机制,是基于 webSocket 的封装,但它不仅仅包括 webSocket,还对轮询(Polling)机制以及其它的实时通信方式封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码 socket.io 是跨平台的,可以实现多平台的即时通讯 由于 iOS 端进行 socket 编程主要使用 GCDAsyncSocket 框架,但要实现 Android、iOS、web 多平台的通讯,还是选择统一的框架或协议比较好。 基本 api,使用 soc
sunsky
2020/08/20
1.4K0
socket.io实践干货
Nodejs+socket.io搭建WebRTC信令服务器
我们在学习 WebRTC 时,首先要把实验环境搭建好,这样我们就可以在上面做各种实验了。
音视频_李超
2020/04/01
8.4K2
Nodejs+socket.io搭建WebRTC信令服务器
《 Socket.IO》 解决 WebSocket 通信!
大家好呀,我是小菜~ 本文主要介绍 Socket.IO 微信公众号已开启,小菜良记,没关注的同学们记得关注哦! 在介绍 Socket.IO 之前, 我们先考虑一个问题, 如果这个时候有个需求, 类似
蔡不菜丶
2022/09/21
2.4K0
《 Socket.IO》 解决 WebSocket 通信!
Socket.IO + Express实现的跨浏览器、子域的聊天室
实例中用到了(实例在Windows XP下运行):Node.js、Socket.IO、Express.js、jade、stylus
meteoric
2018/11/16
1K0
koa+socket.io尝试简单的web动作同步
尝试用过browser-sync辅助开发的前端同学,大概都会感到神奇:在多个端打开网页,网页的动作却是完全同步的。
用户1394570
2018/08/08
8710
koa+socket.io尝试简单的web动作同步
Express结合Socket.io实现智能回复机器人
之前写了一篇 《Node.js中运用socket.io实现智能回复机器人与聊天室功能》 发现浏览的人还挺多,不过这篇博客只是讲解了一些实现原理,现在运用Node的Express框架给大家实现一下智能回复机器人。
越陌度阡
2020/11/26
7700
Angular 双向绑定实现原理
用 Angular + socket.io 做了一个聊天 demo,消息通信没有问题,在 Angular 数据绑定的地方却栽了跟头:明明 model 已经发生了改变,在视图上就是看不到更新。
李振
2021/11/26
4.1K0
Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室
  采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制。聊天室增加了 注册登录 模块 ,并将用户个人信息和聊天记录存入数据库.
书童小二
2018/09/03
2.7K0
Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室
socket.io
本译文来源于https://socket.io/get-started/chat/,不足之处请多批评指正。 最近在学些vuejs和websocket相关技术,使用了websocket的两个封装的库vue-socket.io和vue-websocket
ccf19881030
2020/04/10
4.1K0
socket.io
Express结合socket.io实现分桌点餐
去饭店吃饭的时候,桌上都会有一个二维码,每一桌的每一个用户都可以拿出手机独立点餐,而且同一桌的用户点餐都会在同一个购物车里,比如张三与李四一起来吃饭,张三点了青椒炒肉,李四拿出手机点餐的时候,购物车里就会显示张三点的青椒炒肉,而且每一桌的点餐与其他桌的不会相互干扰,付款的时候以桌为单位独立结账。
越陌度阡
2020/11/26
6610
nodejs多房间web聊天室[通俗易懂]
一年之前的做的小项目,过了许久,翻出当时的PPT文档总结一下。源码下载:https://github.com/CreekLou/chatRoom
全栈程序员站长
2022/06/25
1.6K0
nodejs多房间web聊天室[通俗易懂]
socket.io的简单使用
在开发websocket的时候,我们可能会用到socket.io这个库,来看一下这个库的简答应用,先看一个简单的案例,服务端代码:
挥刀北上
2021/02/03
2.1K0
Node.js中运用socket.io实现智能回复机器人与聊天室功能
众所周知,Java强在计算,而Node强在IO,在Node后端开发中,时常会遇到要求做聊天室和智能回复机器人的功能,这也正是Node的强项,今天给大家介绍一下Node中使用socket.io实现聊天室与智能机器人的原理。
越陌度阡
2020/11/26
1.3K0
NodeJS实现一个聊天室
先说一下为什么写这个东西,最近不是在写NodeJS知识点的梳理嘛,但是我发现梳理的过程着实无聊的要死,虽然已经快梳理一半了,只是还没发布,这个不重要,重要的是不做点什么东西确实无聊,所以今天把我做这个的过程记录给你们看一下,喜欢的可以拿去玩玩。实现的功能是可以聊天,可以显示用户自定义的昵称,并且显示发送时间 PS:这个功能如果我们使用webstorm新建一个express app的项目的话,是可以省很多代码的,但是这里我们选择原生实现它,原因是我们写代码不可能一直依赖于别人搭建好的框架或者轮子,虽然我们提倡不重复造轮子,但是如果每一个程序员都这样想的话,这个行业面临的将是一个轮子都没有。
何处锦绣不灰堆
2020/05/29
1K0
使用node、Socket.io 搭建简易聊天室
Socket.io是一个WebSocket库,会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,而且支持的浏览器最低达IE5.5。 Socket.io 服务器 和 Socket.io 客户端之间全双工通信信道 尽可能使用WebSocket 连接建立(”尽可能“就说明要求客户端和服务端都必须使用,HTTP 长轮询`作为后备。 在了解socket-io前,我们先了解三种通信方式和Http轮询。
can4hou6joeng4
2023/11/29
4780
实现一个简单的WebSocket聊天室
run node index.js,并在浏览器打开 http://localhost:3000,访问成功即可看到
超超不会飞
2020/09/18
1.1K0
实现一个简单的WebSocket聊天室
socket.io的websocket示例
写了一个简单的demo,直接上代码吧。用的时候注意一下版本号,可能 socket.io 的 API 有修改~
meteoric
2018/12/28
1.2K0
低延迟双向实时事件通信 Socket.IO
Socket.IO 是一个库,可以在客户端和服务器之间实现低延迟,双向和基于事件的通信。
Tinywan
2024/08/27
3910
低延迟双向实时事件通信 Socket.IO
相关推荐
基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验