×

Seeed IoTea LoRa解决方案

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-13

康桃花

分享资料个

描述

四川雅安东北部的蒙顶山,山峦起伏,自西向东,掩映在一片绿海之中。这是 36 岁的邓先生最熟悉的景象,他是他那一代为数不多的蒙顶茶师之一,拥有 50 亩(=3.3 公顷)的种植园,海拔 1100 米。邓出身于制茶世家,但继承家族遗产并非易事。“我们的茶叶生长在高海拔的有机环境中,以确保其卓越的品质。但同时生长密度低,成本高,出芽不均匀,茶叶采收困难。这就是为什么高山茶通常是小收成,它们的价值在市场上没有体现。” 过去两年,邓一直在努力提高消费者对高山茶的认识,以提升其价值。而当他遇到范主时,

硬件连接

该项目的硬件可以分为 4 个部分:电源、传感器、节点和网关。以下文章将向您展示如何逐步完成它。

电源部分

电源部分主要包含一块太阳能电池板和一块锂电池,如果你只是为了演示而搭建这个项目,可以忽略它们。或者您可以按照上一教程安装节点电源。

传感器部分

在传感器部分,由于传感器较多,我们使用了一个气象站,还做了一个亚克力支架来安装它们。

pYYBAGOznuuALfBFAADXT0eJVLM911.jpg

如上图所示,Digital Light Sensor 始终位于顶部,以便它可以收集照明信息。会产生热量的传感器安装在亚克力支架的中间,例如 O2 传感器、灰尘传感器和 CO2 传感器。最后,亚克力支架底部的温湿度传感器。

此外,土壤温度和湿度传感器单独安装在土壤中。

节点部分

pYYBAGOznu2AJ0Y2AADyb8fD5XA406.jpg

节点部分是一个安装在防水​​盒中的 Seeeduino LoRaWan,它通过水接头连接到电源和传感器。其中,灰尘传感器连接到LoRaWan的数字引脚D3,二氧化碳传感器连接到引脚D4和D5,土壤传感器连接到引脚D6和D7,O2传感器连接到模拟引脚A1,光传感器和气压传感器连接到I2C端口。

注意:应在土壤传感器的蓝色(数据)电缆和红色(Vcc)电缆之间添加一个 10k 电阻器。

Seeeduino LoRaWan 偶尔收集传感器值,并通过 LoRa 将它们发送到网关。数据格式如下:

 

  {
      [0],    /* Air tempreature(℃)                      */
      [1],    /* Air humidity(%)                          */
      [2],    /* Altitude(m) high byte                    */
      [3],    /* Altitude(m) low byte                     */
      [4],    /* CO2 concentration(PPM) high byte         */
      [5],    /* CO2 concentration(PPM) low byte          */
      [6],    /* Dust concentration(pcs/0.01cf) high byte */
      [7],    /* Dust concentration(pcs/0.01cf) low byte  */
      [8],    /* Light intensity(lux) high byte           */
      [9],    /* Light intensity(lux) low byte            */
      [10],   /* O2 concentration(%)                      */
      [11],   /* Soil temperature(℃)                     */
      [12],   /* Soil humidity(%)                         */
      [13],   /* Battery voltage(V)                       */
      [14]    /* Sensor error code                        */
  }

 

Sensor Error Code 字节中的每一位都有不同的含义,如下所示:

 

  {
      bit0: 1;        /* Barometer Sensor Error */
      bit1: 1;        /* CO2 Sensor Error       */
      bit2: 1;        /* Dust Sensor Error      */
      bit3: 1;        /* Light Sensor Error     */
      bit4: 1;        /* O2 Sensor Error        */
      bit5: 1;        /* Soil Sensor Error      */
      reserved: 2;    /* Reserved               */
  }

 

网关部分

poYBAGOznvCABfRPAADpYNs1g4o413.jpg

网关部分是一个Raspberry Pi,它插入了网关模块RHF0M301-868和PRI 2 Bridge RHF4T002,它安装在防水​​盒中并通过水接头连接到电源和USB摄像头。因为它使用专门的固件,请按照Seeed Wiki进行配置。

软件编程

作为Hardware Connection,Software Programming也可以拆分,可以拆分为3个部分:Node、Gateway和Website。

节点部分

大部分 Node Part 需要的驱动已经包含在 origin_driver 中

文件夹。下面的库需要手动安装:

Adafruit_ASFcore

由于项目复杂,我们建议您使用 Microsoft Visual Studio 而不是 Arduino IDE。一个名为 Visual Micro 的插件可以帮助您使用 Visual Studio 构建 Arduino 项目,单击此处了解更多信息。

为了更好的可读性和可维护性,我们这次使用面向对象编程。该项目的类图如下所示:

pYYBAGOznvKAf0AzAACR6iSMJoA864.png

对于那些已经有 OOP 驱动程序的传感器,我们重新打包以适应这个项目,对于其他传感器,我们使用 OOP 重写了它们的驱动程序。中间件层的Sensor类用于统一实际传感器的接口,例如气压计传感器可以同时采集温度、湿度和高度,所以它有3个接口分别获取温度、湿度和高度。但是他们有不同的方法名,这会使获取传感器值的程序更加复杂,就像这样:

 

  barometer->getTemperature();
  barometer->getHumidity();
  barometer->getAltitude();
  // ...
  another_sensor->getSomeValue();
  // ...

 

但是使用 OOP,它看起来像这样:

 

  for (auto i = 0; i < SENSORS_COUNT; i++) {
      sensors[i]->getValue();
  }

 

我们还打包了一个Application类,它实现了IApplication接口,IoTea.ino中的setup()和loop()方法可以调用Application对象中的setup()和loop()方法。

注意:USB 串行仅用于调试。调试后,请注释掉setup()方法中的初始化代码。

网关部分

Gateway Part 在主文件夹中的 Python 程序用于每小时拍照并上传到 Amazon S3 服务器。在你使用它之前,确保 fswebcam 已经安装在你的 Raspberry Pi 中:

 

sudo apt-get update && sudo apt-get install fswebcam 

 

如果要上传照片,请按照以下步骤配置您的 AWS。首先,使用以下命令将 AWS SDK 和 AWS CLI 安装到您的 Raspberry Pi:

 

sudo pip install boto3
sudo pip install awscli

 

然后,运行 AWS CLI:

 

sudo aws configure

 

配置您的 AWS 访问密钥 ID、AWS 秘密访问 ID 和默认区域名称。

如果你不喜欢上传你的照片,你可以跳过 AWS 配置步骤和 photo.py 中关于上传的注释代码。为了每次启动树莓派后运行这个程序,可以在/etc/init.d中创建一个名为photo的文件,并写入如下代码。

 

#!/bin/bash
# /etc/init.d/photo
### BEGIN INIT INFO
# Provides: seeed_photo
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: photo taking initscript
# Description: This service is used to manage photo taking
### END INIT INFO
case "$1" in
   start)
       echo "Start taking photo"
       /home/rxhf/photo.py &
       ;;
   stop)
       echo "Stop taking photo"
       kill $(ps aux | grep -m 1 'python3 /home/rxhf/photo.py' | awk '{ print $2 }')
       ;;
   *)
       echo "Usage: service photo start|stop"
       exit 1
       ;;
esac
exit 0

 

设置执行权限

 

sudo chmod 777 /etc/init.d/photo
sudo chmod 777 /home/rxhf/photo.py

 

并测试它

 

sudo /etc/init.d/photo start

 

如果没有问题,将其停止并将其添加到启动应用程序中

 

sudo /etc/init.d/photo stop
sudo update-rc.d photo defaults

 

注意:如果你想在 Raspberry Pi 启动后启动网关,请将 Seeed Wiki 中的网关启动代码添加到 /etc/rc.local,如下所示:

 

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
 printf "My IP address is %s\n" "$_IP"
fi

cd /home/rxhf/loriot/1.0.2
sudo systemctl stop pktfwd
sudo gwrst
wget https://cn1.loriot.io/home/gwsw/loriot-risinghf-rhf2s008-rhf1257-SPI-0-latest.bin -O loriot-gw.bin
chmod +x loriot-gw.bin
./loriot-gw.bin -f -s cn1.loriot.io

exit 0

 

网站

我们把网站部署在CentOS7上。以下步骤将向您展示如何部署。

步骤 1. 安装 Python3

 

sudo yum -y install epel-release
sudo yum -y install python36

 

步骤 2. 安装 Python pip 和虚拟环境

 

wget https://bootstrap.pypa.io/get-pip.py
sudo python36 get-pip.py
sudo pip install virtualenv

 

Setp 3. 从 GitHub 克隆我们的网站

 

sudo yum -y install git
git clone https://github.com/SeeedDocument/iotea-hb.git

 

步骤 4. 创建并激活虚拟环境

 

virtualenv -p python36 iotea-hb
cd iotea-hb
source bin/activate

 

Step 5. 安装依赖库

 

pip install pymysql
pip install dbutils
pip install flask
pip install websocket-client
pip install cofigparser

 

步骤 6. 创建数据库

 

sudo yum -y install mariadb mariabd-server
sudo systemctl enable mariadb
sudo systemctl start mariadb
mysql -uroot -p

 

然后使用 iotea_hb.sql 创建表。

Step 7. 创建db.ini,将这些代码写入其中

 

[db]
db_port = 3306
db_user = root
db_host = localhost
db_pass = 
db_name = iotea

 

在 db.py 中更改 db.ini 的路径

 

# in db.py
#cf.read("/data/www/python3_iotea_hb/iotea/conf/db.ini")
cf.read("/home//iotea-hb/db.ini")

 

步骤 8. 在 app.py 中更改端口并启动网站:

 

# in app.py
#app.run(debug=True, port=6000)
app.run(debug=True, port=8080)

 

 

# in terminal
pip install gunicorn
gunicorn -w 5 -b 0.0.0.0:8080 app:app

 

现在用浏览器访问127.0.0.1:8080,可以看到网站,但是看不到实时数据。

步骤 9. 获取洛里奥特数据

打开另一个终端,重新进入虚拟环境并启动loriot app:

 

cd iotea-hb
source bin/activate
gunicorn loriot:app 

 

稍等片刻,您会看到网站显示数据,或者您可以在 loriot.py 中更改 wss:

 

# in loriot.py
#ws = create_connection("wss://cn1.loriot.io/app?token=vnwEuwAAAA1jbjEubG9yaW90LmlvRpscoh9Uq1L7K1zbrcBz6w==")
ws = create_connection()

 

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !