2021爱智先行者—互动树莓派

花和尚 2021爱智先行者 2021-11-18 19:29:09

【本文正在参与"2021爱智先行者-征文大赛"活动】

  之前手上有一个树莓派并开发了一些有意思的小玩意儿。在看到爱智 Spirit 1 之后对这个小巧的智能边缘计算机产生了一点浓厚的兴趣,它实现了一个万物互联的平台。所以马上想到用它来连接一下树莓派,这样就可以让我的树莓派给它打工了,将爱智作为一个数据中心,处理各个地方上报上来的数据,然后再进行资源重新分配,所有的设备都可以根据自己的需求来进行工作了。

接下来用一个小应用来实现这个互动连接。

硬件展示

爱智 Spirit 1

 

树莓派3b+

 

HC-SR04 超声波模块

 

爱智 Spirit 1

CPU     : Allwinner H6 (ARMv8 Cortex-A53 1.3GHz VFPv4)
CACHE   : 64KBytes L1-Cache (D-32K/I-32K) 512KByte L2-Cache
PACKET  : Spirit1 Allwinner H6 Packet for HardWare v3.0
ROM SIZE: 0x00400000 Bytes (0x00000000 - 0x003fffff)
RAM SIZE: 0x77000000 Bytes (0x49000000 - 0xbfffffff)
BSP     : BSP version 1.5.0 for Enterprise

javascript -v

1.5.8 (0)

树莓派

Raspberry Pi 3 Model B Plus Rev 1.3

Architecture: armv7l

Byte Order: Little Endian

CPU(s): 4

On-line CPU(s) list: 0-3

Thread(s) per core: 1

Core(s) per socket: 4

Socket(s): 1

Vendor ID: ARM

Model: 4

Model name: Cortex-A53

Stepping: r0p4

CPU max MHz: 1400.0000

CPU min MHz: 600.0000

BogoMIPS: 38.40

Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

 

pigpiod -v

79

node -v

v10.24.1

npm -v

6.14.15

HC-SR04 超声波模块

工作电压:DC 5V

工作电流:15mA

工作频率:40Hz

射程:4cm~4.5m

测量角度:15°

输入触发信号:10μS 的TTL 脉冲

树莓派与 HC-SR04 超声波模块连接示意图


---------------------------|---------------------------------
                                              
3v3                                    01 02  5v                              -- Vcc
GPIO  2 (WiringPi  8)      03 04  5v
GPIO  3 (WiringPi  9)      05 06  GND
GPIO  4 (WiringPi  7)      07 08  GPIO 14 (WiringPi 15)
GND                                 09 10  GPIO 15 (WiringPi 16)
GPIO 17 (WiringPi  0)     11 12  GPIO 18 (WiringPi 1)   -- Trig
GPIO 27 (WiringPi  2)    13 14  GND                             -- Gnd
GPIO 22 (WiringPi  3)    15 16  GPIO 23 (WiringPi 4)
3v3                                  17 18  GPIO 24 (WiringPi 5)   -- Echo
GPIO 10 (WiringPi 12)    19 20  GND
GPIO 09 (WiringPi 13)    21 22  GPIO 25 (WiringPi 6)
GPIO 11 (WiringPi 14)     23 24  GPIO 8  (WiringPi 10)
GND                                 25 26  GPIO 7  (WiringPi 11)
GPIO  0 (WiringPi 30)    27 28  GPIO 1  (WiringPi 31)
GPIO  5 (WiringPi 21)    29 30  GND
GPIO  6 (WiringPi 22)    31 32  GPIO 12 (WiringPi 26)
GPIO 13 (WiringPi 23)    33 34  GND
GPIO 19 (WiringPi 24)    35 36  GPIO 16 (WiringPi 27)
GPIO 26 (WiringPi 25)    37 38  GPIO 20 (WiringPi 28)
GND                                 39 40  GPIO 21 (WiringPi 29)

---------------------------|---------------------------------

爱智 Spirit 1 与 树莓派的强强联合

应用的整个连接通过的是 CoAP 协议:

CoAP(Constrained Application Protocol,受限应用协议,RFC 7252)协议是一种运行在资源、通信带宽十分有限的物联网设备上的 M2M(Machine to Machine)通信协议。

CoAP 协议运行在 UDP 协议之上,并且设计得非常小巧,最小的数据包只有 4 个字节。CoAP 协议采用 C/S 架构,使用类似于 HTTP 协议的 请求/响应(Request/Response)的交互模式。设备可以通过类似于 coap://192.168.1.150:5683/floor/temperature 的 URL 来标识一个实体对象(资源),并使用类似于 HTTP 协议的 RESTful 风格 API 和 PUTGETPOSTDELETE 方法来获取或者修改这个实体对象的状态。

首先我们通过 CoAP 协议在爱智 Spirit 1 和 树莓派上建立连接,爱智中已经集成了 CoAP 包,树莓派上需要安装 nodejs 的 coap 包,然后我们在爱智应用中通过client 像 树莓派上建立的 CoAP server 发送获取距离的指令。

// routers/rest.js

const coap = require('coap');

router.get('/get-distance', function(req, res) {
  // 这里填写 树莓派上 CoAP 服务地址
  var coapClient = coap.request('coap://192.168.64.89:5683/get-distance', function (client) {
    client.on('response', function (client, data) {
      console.log('>> Recv message:', data.payload.toString());
      res.json({
        code: 0,
        data: data.payload.toString()
      })
    });
  }, {method: 'GET', payload: 'get-distance'});
})

// 前端页面通过 API 请求 /get-distance 资源路径回去返回的结果,进行展示
// 前端页面见参考链接

接着我们在树莓派上创建 CoAP 的 server 端

// main.js
const coap = require('coap')
const server = coap.createServer()
const trigHCSR04 = require('./libs/hc-sr04')

const PORT = 5683
server.on('request', function (req, res) {
  console.log('>> url:', req.url.split('/'))
  console.log('>> req:', req.payload.toString())
  trigHCSR04((data) => {
    res.end(`${data}`)
  })
})

server.listen(PORT, function () {
  console.log(`>> raspi CoAP server started on port: ${PORT} <<`)
})

CoAP 服务端接收到请求然后将获取的数据返回到 爱智APP。

// hc-sr04.js
const Gpio = require('pigpio').Gpio;
// 每ms的声速
const MICROSECDONDS_PER_CM = 1e6 / 34321;
const trigNumber = 18;
const echoNumber = 24;
const trigger = new Gpio(trigNumber, { mode: Gpio.OUTPUT });
// 设置 trigger 引脚为输出引脚
const echo = new Gpio(echoNumber, { mode: Gpio.INPUT, alert: true });
// 设置 echo 引脚为输入
trigger.digitalWrite(0);
// 设置 trigger 引脚为低电平
let cb = () => {}
const watchHCSR04 = () => {
  let startTick;
  echo.on('alert', (level, tick) => {
    if (level == 1) { startTick = tick; }
    else {
      const endTick = tick;
      const diff = (endTick >> 0) - (startTick >> 0);
      // 无符号的 32位数据
      const distance = diff / 2 / MICROSECDONDS_PER_CM;
      cb(distance)
      // process.exit(0)
    }
  });
};
watchHCSR04();
function trigHCSR04 (callback) {
  cb = callback
  trigger.trigger(10, 1)
}

module.exports = trigHCSR04;

我们来看看效果:

https://gitee.com/xybin1990/connect-raspi-web/blob/master/public/results.gif

 

总结

爱智中的 JSRE 已经集成了多种通讯协议,这为我们开发带来了很多的便捷,也为我们的创意带来了更多的可能性。再搭配上各种传感器设备,发挥无边无际的想象力吧。

 

参考链接:

爱智APP项目地址

爱智APP页面项目地址

树莓派项目地址

...全文
257 1 收藏 回复
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
相关推荐
发帖
爱智开发者社区
创建于2021-08-16

228

社区成员

爱智开发者平台是一个开放的物联网平台,通过爱智世界,应用开发者可以把自己的应用分发到亿万用户的设备上,硬件开发者能够把设备能力开放给海量的开发者,让优质的应用脱颖而出,为用户提供更优秀的使用体验。
帖子事件
编辑了帖子
2021-11-22 16:53
创建了帖子
2021-11-18 19:29
社区公告
暂无公告