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

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

作者头像
用户1749219
发布于 2018-05-16 03:39:58
发布于 2018-05-16 03:39:58
2.2K00
代码可运行
举报
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Socket的讲解
伙伴们,如果你觉得我写的文章对你有帮助就给zayyo点一个赞👍或者关注➕都是对我最大的支持。当然你也可以加我微信:IsZhangjianhao,邀你进我的前端学习交流群,一起学习前端,成为更优秀的工程师~
zayyo
2023/11/18
2061
socket.io
本译文来源于https://socket.io/get-started/chat/,不足之处请多批评指正。 最近在学些vuejs和websocket相关技术,使用了websocket的两个封装的库vue-socket.io和vue-websocket
ccf19881030
2020/04/10
4K0
socket.io
Express结合Socket.io实现聊天室功能
之前写了一篇 《Node.js中运用socket.io实现智能回复机器人与聊天室功能》 发现浏览人还挺多,不过这篇博客只是讲解了一些实现原理,现在运用Node的Express框架给大家实现一下聊天室。
越陌度阡
2020/11/26
1.2K0
使用socket.io开发简单群聊功能
1、新建package.json文件: { "name": "socket-chat-example", "version": "0.0.1", "description": "my fi
用户1141560
2017/12/26
1.1K0
socket.io初了解
server.js const express = require('express'); const app = express(); const http = require('http'); const server = http.createServer(app); const { Server } = require("socket.io"); const io = new Server(server); app.get('/', (req, res) => { res.sendFile(
用户4792657
2022/07/06
4680
Express结合Socket.io实现智能回复机器人
之前写了一篇 《Node.js中运用socket.io实现智能回复机器人与聊天室功能》 发现浏览的人还挺多,不过这篇博客只是讲解了一些实现原理,现在运用Node的Express框架给大家实现一下智能回复机器人。
越陌度阡
2020/11/26
7550
socket.io的简单使用
在开发websocket的时候,我们可能会用到socket.io这个库,来看一下这个库的简答应用,先看一个简单的案例,服务端代码:
挥刀北上
2021/02/03
2K0
Socket.io进阶-命名空间的使用
使用socket.io搭建服务器可以使用命名空间,每个命名空间类似于一个独立的管道。
挥刀北上
2021/02/03
1.4K0
《 Socket.IO》 解决 WebSocket 通信!
大家好呀,我是小菜~ 本文主要介绍 Socket.IO 微信公众号已开启,小菜良记,没关注的同学们记得关注哦! 在介绍 Socket.IO 之前, 我们先考虑一个问题, 如果这个时候有个需求, 类似
蔡不菜丶
2022/09/21
2.4K0
《 Socket.IO》 解决 WebSocket 通信!
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实践干货
Vue.js 如何使用 Socket.IO ?
在很多需求业务中,都需要浏览器和服务器实时通信来实现功能,比如:扫码登录(扫码后,手机确认登录,PC网页完成登录并跳转)、订单语言提醒等,这些都是建立在两端实时通信的基础上的。对前端而言,来实现浏览器和服务器实时通信,最好的选择就是Socket.IO库,能够快速的实现两端实时通信功能。
Javanx
2019/09/04
4.9K0
Vue.js 如何使用 Socket.IO ?
koa+socket.io尝试简单的web动作同步
尝试用过browser-sync辅助开发的前端同学,大概都会感到神奇:在多个端打开网页,网页的动作却是完全同步的。
用户1394570
2018/08/08
8570
koa+socket.io尝试简单的web动作同步
socket.io的websocket示例
写了一个简单的demo,直接上代码吧。用的时候注意一下版本号,可能 socket.io 的 API 有修改~
meteoric
2018/12/28
1.2K0
Socket.IO + Express实现的跨浏览器、子域的聊天室
实例中用到了(实例在Windows XP下运行):Node.js、Socket.IO、Express.js、jade、stylus
meteoric
2018/11/16
1K0
socket.io搭配pm2(cluster)集群解决方案
socket.io与cluster 在线上系统中,需要使用node的多进程模型,我们可以自己实现简易的基于cluster模式的socket分发模型,也可以使用比较稳定的pm2这样进程管理工具。在常规的http服务中,这套模式一切正常,可是一旦server中集成了socket.io服务就会导致ws通道建立失败,即使通过backup的polling方式仍会出现时断时连的现象,因此我们需要解决这种问题,让socket.io充分利用多核。 在这里之所以提到socket.io而未说websocket服务,是因为so
欲休
2018/03/15
5.9K1
socket.io搭配pm2(cluster)集群解决方案
低延迟双向实时事件通信 Socket.IO
Socket.IO 是一个库,可以在客户端和服务器之间实现低延迟,双向和基于事件的通信。
Tinywan
2024/08/27
2960
低延迟双向实时事件通信 Socket.IO
Express结合socket.io实现分桌点餐
去饭店吃饭的时候,桌上都会有一个二维码,每一桌的每一个用户都可以拿出手机独立点餐,而且同一桌的用户点餐都会在同一个购物车里,比如张三与李四一起来吃饭,张三点了青椒炒肉,李四拿出手机点餐的时候,购物车里就会显示张三点的青椒炒肉,而且每一桌的点餐与其他桌的不会相互干扰,付款的时候以桌为单位独立结账。
越陌度阡
2020/11/26
6490
Node.js中运用socket.io实现智能回复机器人与聊天室功能
众所周知,Java强在计算,而Node强在IO,在Node后端开发中,时常会遇到要求做聊天室和智能回复机器人的功能,这也正是Node的强项,今天给大家介绍一下Node中使用socket.io实现聊天室与智能机器人的原理。
越陌度阡
2020/11/26
1.2K0
实时通信框架 Socket.IO
主要内容: 1. Socket.IO 是什么?有什么特点 2. 实际应用的案例 3. 动手开发一个小示例 Socket.IO 简介 Socket.IO 可以实现实时双向基于事件的通信,专注于速度和可靠性,官方称其是最快的和最可靠的实时引擎 Socket.IO 支持非常全面的通信机制,包括 : WebSocket Adobe Flash Socket AJAX长轮询 AJAX multipart streaming 持久Iframe JSONP轮询 Socket.IO 根据浏览器的支持情况自动选择最佳方式 S
dys
2018/04/04
2.5K0
实时通信框架 Socket.IO
使用node、Socket.io 搭建简易聊天室
Socket.io是一个WebSocket库,会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,而且支持的浏览器最低达IE5.5。 Socket.io 服务器 和 Socket.io 客户端之间全双工通信信道 尽可能使用WebSocket 连接建立(”尽可能“就说明要求客户端和服务端都必须使用,HTTP 长轮询`作为后备。 在了解socket-io前,我们先了解三种通信方式和Http轮询。
can4hou6joeng4
2023/11/29
4240
相关推荐
Socket的讲解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验