一条命令部署FreeRTOS for XR806交叉编译环境

之前,全志科技XR806主要是用来跑OpenHarmony(鸿蒙)的。

但由于鸿蒙这个操作系统还比较新,编译环境配置起来有些麻烦,于是我就做了一个基于Docker的交叉编译环境。

最近看到全志科技公布了XR806的FreeRTOS SDK,赶紧一探究竟。

其实全志之前出了几个版本,现在这个1.2.1版本经过多方测试,比较稳定。

先来看看这个版本的主要功能。

xr806_sdk-v1.2.1的主要功能描述如下:

1、支持WiFi STA/AP模式;
2、支持WiFi WPA3功能;
3、支持BLE扫描、广播、连接、配对;
4、支持BLE MESH;
5、支持SoundConfig、AirKiss、SmartConfig、APConfig配网;
6、支持MbedTLS、MQTT、WebSocket等多种网络协议;
7、支持PSRAM、DMA、GPIO、UART、PWM、CODEC播放与录音、ADC转换、硬件加解密、看门狗等多种外设;
8、支持MP3、M4A、AAC、AMR、TS、M3U8等音频的播放,支持Flash、HTTP、HTTPS、音频数据流播放。

FreeRTOS是国际上比较流行的一款MCU的嵌入式操作系统。

历史悠久,用户基础很大。

为了方便初学者调试,我这里顺便做了一个FreeRTOS交叉编译的Docker版本。

Docker官方仓库地址:

https://hub.docker.com/r/verdureorange/ubuntu_xr806

安装方式:

在已经安装Docker的情况下,执行以下命令:

docker run -it verdureorange/ubuntu_xr806:v2 /bin/bash

注:v1是OpenHarmony的环境,v2才是FreeRTOS的,请勿搞混。

全志XR806 FreeRTOS_BSP编译

1、构建工作文件夹
(1)cd ~
(2)mkdir work
(3)cd work
(4)mkdir xr806
(5)cd xr806
2、获取资源
(1)wget http://www.armsoc.cn/whycan/xr806/xr806_sdk_v1.2.1.tgz
(2)wget http://www.armsoc.cn/whycan/xr806/gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2

如果获取失败,直接whycan下载(可能需要积分)
–>freeRTOS bsp
    xr806_sdk_v1.2.1.tgz
–>gcc工具链   
    gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
3、编译一个例程
(1)解压bsp
tar -xzvf xr806_sdk_v1.2.1.tgz
(2)选择一个例程进行编译
cd ~/work/xr806/xr806_sdk_v1.2.1/project/demo
ls
可以看到现在有一下几个例程

book@book-desktop:~/work/xr806/xr806_sdk_v1.2.1/project/demo$ ll
总用量 32
drwxrwxr-x  8 book book 4096 4月   2 16:50 ./
drwxrwxr-x 10 book book 4096 4月   2 16:50 ../
drwxrwxr-x  3 book book 4096 4月   2 17:26 at_demo/
drwxrwxr-x  4 book book 4096 4月   2 17:23 audio_demo/
drwxrwxr-x  8 book book 4096 4月   2 16:50 bluetooth/
drwxrwxr-x  3 book book 4096 4月   2 17:22 hello_demo/
drwxrwxr-x  4 book book 4096 4月   2 16:50 wlan_ble_demo/
drwxrwxr-x  3 book book 4096 4月   2 16:50 wlan_demo/

(3)选择hello_demo
    cd hello_demo
(4)进入gcc目录,进行编译
cd gcc
make
    结果,编译出错了,原因是我们没有安装交叉编译工具链。

...
/bin/sh: 1: /home/book/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gcc: not found
../../../../project/project.mk:437: recipe for target 'hello_demo.elf' failed
make[1]: *** [hello_demo.elf] Error 127
make[1]: 离开目录“/home/book/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc”
../../../../project/project.mk:426: recipe for target '__all' failed
make: *** [__all] Error 2

4、安装交叉编译工具链
(1)解压工具链
cd ~/work/xr806/
tar -xvf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
(2)复制到项目例程指定的目录
根据上面的错误信息,我们可以知道交叉编译工具链,应该是存放在这个位置:
/home/book/tools/gcc-arm-none-eabi-8-2019-q3-update/

cd ~
mkdir tools
cd ~/work/xr806/
cp -r gcc-arm-none-eabi-8-2019-q3-update ~/tools/

5、回到例程目录,重新编译
cd ~/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc/
make
编译结果,看起来像是成功了

~/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-objcopy -O binary -R .xip   hello_demo.elf hello_demo.bin
~/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-objcopy -O binary -j .xip hello_demo.elf hello_demo_xip.bin
~/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-size hello_demo.elf
   text    data     bss     dec     hex filename
  39768    1576    2248   43592    aa48 hello_demo.elf
make[1]: 离开目录“/home/book/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc”
book@book-desktop:~/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc$ 

我们得到了两个bin文件,一个elf文件
hello_demo.bin
hello_demo_xip.bin
hello_demo.elf

6、烧写程序到开发板

(1)生成烧写镜像
上述make只是生成了bin文件,我们需要进一步生成烧写镜像,才可以顺利下载。
make image

Flash Layout:
sec bin 0 boot_40M.bin      :   flash_offs: 0x00000000(   0K)   data_size: 0x00002F28(  12K)
sec bin 1 app.bin           :   flash_offs: 0x00004000(  16K)   data_size: 0x00004920(  19K)
sec bin 2 app_xip.bin       :   flash_offs: 0x00029800( 166K)   data_size: 0x000058E0(  23K)

generate image: xr_system.img
cp -t ../../../../out/ ../image/"xr806"/*.bin ../image/"xr806"/xr_system.img *.map
book@book-desktop:~/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc$ 

(2)获取工具
工具存放在bsp包./tools目录里,程序文件为phoenixMC.exe。

(3)烧写镜像

作者:LinjieGuo

来自:WhyCan Forum

如何将树莓派CM4的Wi-Fi改为外置天线

树莓派 CM4 在设计时考虑到兼容性,系统默认用的是内置 PCB 天线。那怎么设置,切换到外置 WiFi 天线呢?

首先,你得把树莓派 CM4 天线(Antenna Kit)给焊上去,也就是下图那个黄色圆点。 

然后编辑 /boot/config.txt 文件。

在文件末尾加入一行配置:

dtparam=ant2

然后重启 树莓派CM4 ,让配置生效即可。

一个外置天线,大概三十多块钱人民币吧。

一条命令搞定全志XR806编译环境

XR806广泛应用于家电、安防等产品,比如以下案例。

  1. 智能家电,如空凋、冰箱、洗衣机,通过无线模组,通过家电<->服务器<->手机的连接关系,实现远程控制。
  2. IPC。即网络摄像头,网络编码模块将模拟摄像机采集到的模拟视频信号编码压缩成数字信号,从而可以直接接入网络交换及路由设备。
  3. 智能门锁。XR806特有的超低功耗技术,保证了稳定连接的前提下也保证了续航。

但是编译环境的设置比较麻烦,这里提供容器化安装方式,一条命令装好(使用前必须先安装Docker)

省的大家又是找源代码,又是配置环境了。

docker pull verdureorange/ubuntu_xr806:v1

Ubuntu 20.04 for Allwinner XR806.

Integrated demo codes and compilation tools, easy to quickly generate image package.

Teaching video: https://youtu.be/maNb565bnyI

Author: Medivh

If you have any questions, you can send me an email. Email:verdureorange@gmail.com

Linux /dev/mapper/ubuntu–vg-ubuntu–lv磁盘满了怎么解决

在安装Ubuntu Server后,经常会发现磁盘没用到一半突然满了。

这大概率是你在安装Ubuntu Server的时候采用了LVM模式。

可以先用指令 df -h 查看磁盘情况。

root@mysheep:/var/lib/docker# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               955M     0  955M   0% /dev
tmpfs                              198M  1.2M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  3.9G  3.5G  237M  94% /
tmpfs                              986M     0  986M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              986M     0  986M   0% /sys/fs/cgroup
/dev/loop0                          90M   90M     0 100% /snap/core/8039
/dev/loop1                          89M   89M     0 100% /snap/core/7270
/dev/sda2                          976M   77M  832M   9% /boot
tmpfs                              198M     0  198M   0% /run/user/1000

所以现在需要扩容,用指令显示存在的卷组,vgdisplay

root@mysheep:/var/lib/docker# vgdisplay
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <19.00 GiB
  PE Size               4.00 MiB
  Total PE              4863
  Alloc PE / Size       1024 / 4.00 GiB
  Free  PE / Size       3839 / <15.00 GiB
  VG UUID               lhPVeA-sFX5-5sQ6-2mAq-VR41-uvjU-YrPzFI

看到这一行,发现还能扩容:

Free PE / Size 3839 / <15.00 GiB

这就是可以扩充的大小。

lvextend -L 120G /dev/mapper/ubuntu--vg-ubuntu--lv     //增大至120G
lvextend -L +20G /dev/mapper/ubuntu--vg-ubuntu--lv     //增加20G
lvreduce -L 50G /dev/mapper/ubuntu--vg-ubuntu--lv      //减小至50G
lvreduce -L -8G /dev/mapper/ubuntu--vg-ubuntu--lv      //减小8G
lvresize -L  30G /dev/mapper/ubuntu--vg-ubuntu--lv     //调整为30G
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv            //执行调整

上面是示范,可以根据自身情况来进行扩容,最后执行最后的调整指令,然后就扩充成功了。

oot@mysheep:/var/lib/docker# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               955M     0  955M   0% /dev
tmpfs                              198M  1.2M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  9.8G  3.5G  5.9G  37% /
tmpfs                              986M     0  986M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              986M     0  986M   0% /sys/fs/cgroup
/dev/loop0                          90M   90M     0 100% /snap/core/8039
/dev/loop1                          89M   89M     0 100% /snap/core/7270
/dev/sda2                          976M   77M  832M   9% /boot
tmpfs                              198M     0  198M   0% /run/user/1000

文章来自:https://blog.csdn.net/Fish_Sheep/article/details/103325378

RK3399的Rock pi 4B怎么装Docker Community Edition

以ubuntu20.04为例子,

如果你过去安装过 docker,先删掉:

sudo apt-get remove docker docker-engine docker.io

首先安装依赖:

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

根据你的发行版,下面的内容有所不同。如果你使用的发行版是Ubuntu。

信任 Docker 的 GPG 公钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

对于 amd64 架构的计算机,添加软件仓库:

sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
   $(lsb_release -cs) \
   stable"

如果你是树莓派或其它 64位ARM 架构计算机,请运行:

echo "deb [arch=arm64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
     $(lsb_release -cs) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list

最后安装。

sudo apt-get update
sudo apt-get install docker-ce

构建一个镜像:

docker build -t huaan/mypro:v1 .
# -f指定Dockerfile文件的路径,不一定要指定
# -t指定镜像名字和TAG
# .指当前目录,这里实际上需要一个上下文路径

进入一个已经运行的容器:

docker exec -it be97856fab35 bash

普通停止容器操作:

docker stop $(docker ps -aq)

docker 如何删除none镜像?

删除none的镜像,要先删除镜像中的容器。要删除镜像中的容器,必须先停止容器。

sudo docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }') //停止容器
sudo docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }') //删除容器
sudo docker rmi $(docker images | grep "none" | awk '{print $3}') //删除镜像

查看当前的文件卷:

docker volume ls

删除查询到的数据卷:

docker volume rm $(docker volume ls -q)

删除网络:

docker network rm $(docker network ls -q)

强制清除:

docker system prune --all --force

将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下:

docker cp /www/runoob 96f7f14e99ab:/www/

将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为aaa:

docker cp /www/runoob 96f7f14e99ab:/aaa

将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中:

docker cp 96f7f14e99ab:/www /tmp/

树莓派可以网络安装了—— Beta版正在公测

大部分时候,我们都是用另一台计算机(比如运行 Raspberry Pi Imager写入镜像)来给树莓派装系统的。

但是,如果你一开始没有PC,如何将操作系统安装到 SD 卡上呢?

这是经典的先有鸡还是先有蛋的问题,我们刚刚解决了它。

新的网络安装程序正在运行

现在有一个实现网络安装的 Raspberry Pi 引导加载程序beta 版本,我们希望你能帮助我们对其进行测试。

新的网络安装功能可直接在 Raspberry Pi 4 或 Raspberry Pi 400 上启动Raspberry Pi Imager应用程序,方法是:先用以太网电缆从 Internet 下载它。

Raspberry Pi Imager 应用程序将在你的 Raspberry Pi 内存中运行,然后把操作系统写入空白 SD 卡或 USB 磁盘,就像平常一样。

如何使用网络安装程序

如果你想试用这个网络安装程序,首先必须安装bootloader的测试版。

对于当前已经上市的电路板,需要更新bootloader。

不过一旦测试期结束,我们最终将在树莓派出厂时直接安装新的网络引导加载程序,不再需要此步骤。

安装新的 beta 引导加载程序

在 Raspberry Pi 4 或 400 上更新bootloader最简单方法是在 Raspberry Pi 或另一台计算机上运行Raspberry Pi Imager,将所需的软件复制到 SD 卡上。

你需要一张备用的空白 SD 卡,如果你使用的是 Raspberry Pi 或另一台没有 SD 卡插槽的计算机,则需要一个 USB to SD转接头。

你应该知道,用于更新 Raspberry Pi 引导加载程序的 SD 卡将被擦除所有现有数据,因此不要将有重要数据的 SD 卡装在当前Raspberry Pi上 。

在 Imager 应用程序中,单击“选择操作系统”按钮并在弹出窗口中向下滚动“操作系统”列表。选择“Misc utility images”,然后选择“Beta Test Bootloader”。

选择新的 Beta 测试引导加载程序

接下来,你需要选择引导顺序。

所有选项相同,但启动顺序不同。有其他理由,否则应该选择“SD Card Boot”。

选择引导顺序

然后按照正常说明将更新的引导加载程序写入 SD 卡。

当 SD 卡完成写入后,你应该关闭 Raspberry Pi 并移除现有的 SD 卡并将其放在安全的地方。

将刚用 Imager 应用程序写过的卡插入 Raspberry Pi 并重新打开电源。板子 LED 会定期闪烁,屏幕会变绿,表示新的 beta 版本引导加载程序成功启动。

如果你想将引导加载程序恢复到“Release”版本,可以再次执行这些步骤,选择顶部的“引导加载程序”选项而不是“Beta 测试引导加载程序”选项。

现在移除你的引导加载程序更新 SD 卡并重启树莓派。

尝试网络启动

现在你已经更新了引导加载程序,一切应该和以前一样工作。

当 Raspberry Pi 启动时,引导加载程序会搜索要加载的软件。它首先查找 SD 卡,然后查找 USB 记忆棒,依此类推。

它会一直循环下去,直到找到要使用的软件。几秒钟后,你会在屏幕上看到一个诊断信息,告知它正在做什么。

如果你想插入原来的 SD 卡(你在这一切开始之前使用的那个),你的 Raspberry Pi 应该会像往常一样无缝地引导回操作系统。

如果你在插槽中没有 SD 卡或使用空白 SD 卡的情况下启动 Raspberry Pi,并且连接了键盘,那么你现在会看到一些不同的东西。

如果你连接了键盘(Raspberry Pi 400 总是如此),但 Raspberry Pi 无法找到操作系统,它将显示新的网络安装界面。

新的网络安装界面


在后台,你的 Raspberry Pi 仍在寻找可运行的操作系统。但是此时,你可以通过按住该Shift键三秒钟来启动网络安装过程。在出现提示时按确认你要继续按Space,它应该会要求你插入以太网电缆。

你将需要通过以太网电缆将 Raspberry Pi 物理连接到路由器,而不是将其连接到无线网络。你需要一根两端都有公头 RJ45 连接器的以太网电缆。大多数家用路由器的背面都有网口,可让你插入以太网电缆,因此将电缆的一端插入路由器,另一端插入树莓派。

记得插网线

当它检测到已插入电缆时,它会自动下载 Raspberry Pi Imager。如果下载失败,你可以重复该过程。

安装 Raspberry Pi Imager

最终,Raspberry Pi Imager 应用程序在树莓派上启动,允许你将完整的操作系统安装到新的空白 SD 卡或 USB 记忆棒上。

如果你还没有这样做,此时应该将另一张空白 SD 卡插入 Raspberry Pi 卡槽。Raspberry Pi Imager 允许你直接从 Internet 烧录系统。

系统装好后不会在启动时看到网络安装界面。如果还想运行它,只需要删除所有可启动磁盘,等 Raspberry Pi Imager 运行再重新插入它们。但注意不要覆盖任何有重要工作内容的磁盘!

Jupyter怎么装到Rocky Linux 8上

Jupyter是Python数据分析的一个重要工具,除非你对图表没什么要求,或者习惯了命令行。否则大多会用到这个工具。

Rocky Linux是红帽家族的一个开源免费发行版。两者加到一起,就是一个字:稳。

首先,你可以用Root用户登录。然后执行如下命令:

jupyter notebook --generate-config

生成配置文件,程序会提醒你配置文件保存在哪里的。

比如我这里是:

/root/.jupyter/jupyter_notebook_config.py

然后,编辑这个配置文件。

第一步,让Jupyter可以远程访问,因为默认都是localhost Only。

c.NotebookApp.ip = ‘*’

第二步,让Jupyter换个端口,这个看自己,不是必选项。

c.NotebookApp.port = 8888

改完配置文件后,还得设置Jupyter需要密码登录,不然你的小秘密都被人看光光了。

执行:

jupyter notebook password

敲两遍密码,成功。密码文件会保存在这里。

/root/.jupyter/jupyter_notebook_config.json

最后执行:

jupyter notebook –allow-root

就可以启动Jupyter了。

我是王文文,欢迎关注IoT前哨站和我交流。

树莓派挖矿教程之Chia篇

随着数字货币的兴起,不少人又开始了挖矿生涯。

除了经典的显卡和CPU挖矿以外,其实业内还有一种硬盘挖矿的方法。这就是号称“绿色比特币”的Chia。

目前的价格大概是4500-5500RMB一枚。

它倒是不怎么耗电,但很耗硬盘。所以你接个树莓派也可以挖。

基本配置:

树莓派4B(至少4GB内存版本)

64位系统(不一定要RaspberryPi OS)

大容量硬盘一块

步骤:

先到chia.net下载工具。

找到树莓派的版本,目前官方测过的主要就是树莓派4B。

直接安装或者下载后安装都可以。

安装完启动该程序。

别忘了24个助记词。

把P好的文件导入。当然,如果你不嫌慢,在树莓派上生成Plots也可以。

如果硬盘挂载顺利,可以看到现成的Plot文件。

导入以后你可以在标签栏里看到它们。

在网络同步完成之后,你就可以开始挖了。

Chia挖矿的入门,就是这么简单。

如何让树莓派Pico支持LoRaWAN

LoRaWAN是由LoRa联盟推出的一个低功耗广域网规范,这一技术可以为电池供电的无线设备提供区域、国家甚至全球的网络。

它瞄准了物联网中的一些核心需求,比如安全的双向通讯、移动化和本地服务。该技术无需复杂配置,即可以让智能设备实现无缝的互操作,给物联网领域的用户、开发者和企业自由操作权限。

使用合理的LoRa天线,你可以通过网关将电池供电的传感器连到互联网,信号覆盖半径大约15公里。缺点是可用带宽将以字节为单位,而不是以兆字节甚至千字节为单位。

一个Adafruit RFM95W LoRa无线电装置连接到树莓派Pico

Arduino LoRa库的作者Sandeep Mistry为树莓派Pico搞定了LoRa和以太网支持。

目前他的库能让Semtech SX1276无线电模块更好的工作在Pico和其它RP2040芯片的开发板上。

当然,这意味着像Adafruit的RFM95W、LoRa FeatherWing这样的模块,也可以获得很好的支持。

LoRaWAN覆盖情况

要使用LoRaWAN启用的Pico,你(的设备)需要在LoRa网关覆盖的范围内。幸运的是,有一个名叫“The Things Network”的LoRaWAN网络,它几乎覆盖全球。

关于The Things Network的视频:

https://mp.weixin.qq.com/s/GIPuEb6qQMOmHcPDRXmF9A

这取决于你当前所处的地理位置,很可能你已经在覆盖范围内了。比如英国境内的LoRa网络情况(如图)。

一个LoRaWAN基站的成本在几千美元的日子已经一去不复返了。现在你可以花75英镑买个LoRa网关。

注:The Things Network 是 LoRaWAN 行业里著名的 Network Server 提供方,许多国外的厂家,都是默认连接 TTN 的平台。

作为 LoRa 联盟董事会成员,TTN 现在已经在全球90多个国家和地区部署了3000多个基站,这个数字还在飞速增长中。TTN一直秉承的 “Let’s build this thing together”的开放文化也吸引了超过3万名开发者加入 TTN 社区。

获取源码

如果你已经设置并可以使用树莓派Pico工具链,请确保你的 pico-sdk 是最新的。如果没有,你应该首先设置C/C++ SDK,然后再从GitHub中获取项目。

$ git clone --recurse-submodules https://github.com/sandeepmistry/pico-lorawan.git

$ cd pico_lorawan

PICO_SDK_PATH 在继续操作之前,请确保做好设置。举例来说,如果你要在一个树莓派上构建相关应用,你要先运行 pico_setup.sh 脚本,或者按照我们的指示入门指南。

先设置好环境变量。

$ export PICO_SDK_PATH = /home/pi/pico/pico-sdk

之后,你可以准备构建库和示例应用程序。但是在执行此操作之前,我们需要做另外两件事:在要存储数据的云基础架构上进行配置,并将LoRa无线电模块连接到Raspberry Pi Pico。

设置一个应用程序

The Things Network 目前正在从V2迁移到V3堆栈。由于我的家庭网关是几年前设置的,因此我仍在使用V2软件,尚未迁移。

因此,我将构建一个V2风格的应用程序。但如果你用公共网关或自己构建网关,则可构建V3样式的应用程序。

同理,你可以根据下面的内容逐步完成操作。请注意,对于新的V3堆栈,有一个单独的网络控制台,外观可能有所不同。

地址:https://account.thethingsnetwork.org/users/authorize?client_id=ttn-console&redirect_uri=https:%2F%2Fconsole.thethingsnetwork.org%2Foauth%2Fcallback&response_type=code&state=_wyzCpGx9A

当新网关覆盖范围内的任何LoRa设备将其数据包接收和发送到上游的“The Things Network”时,除非数据包有其它地方可去,否则数据包将被丢弃。换句话说,“The Things Network”需要知道网关接收的数据包路由到哪里。

为了提供此信息,我们首先需要在The Things Network Console中创建一个应用程序 。

然后你需要做的就是输入唯一的Application ID字符串(可以是任何内容)。控制台将生成一个Application EUI和一个默认的Access Key,我们将通过它们,将设备注册到我们的应用程序中。

一旦我们注册了应用程序,我们要做的就是将单个设备(以后可能有多个设备)注册到该应用程序,以便后端知道从该设备路由数据包的位置。

注册设备

可以从控制台的应用程序页面注册我们的设备。

设备ID是易于识别的字符串,用于标识我们的远程设备。

由于Adafruit的RFM9W功能板在包装袋中有像无线入网号那种唯一标识符的贴纸,因此我们可以使用它在字符串后附加以唯一地标识我们的树莓派Pico,因此最终得到类似pico-xy-xy-xy-xy-xy-xy的设备ID名称。

我们还需要生成一个Device EUI2,这是一个64位的唯一标识符。这里我们同样可以使用标签上的唯一标识符,只不过这次我们可以用两个前导零 0000xyxyxyxyxyxyxy填充它,以便生成我们的Device EUI。你也可以使用pico_get_unique_board_id()来生成Device EUI。

相关链接:https://github.com/sandeepmistry/pico-lorawan/blob/main/examples/default_dev_eui/main.c

如果你要在注册后查看“设备”页面,则需要设置Application EUI 2Application Key 2来让开发板与LoRa网络通信。准确地说,是让网络正确地将数据包从你的开发板路由到你的应用程序。

在面包板上接线

现在我们已经设置了云后端,接下来需要做的是将Pico连接到LoRa扩展板。不幸的是,RFM95W breakout 与面包板的连接并不友好 —— 比如这个项目,需要访问电路板两侧的无线电引脚。在这种情况下,板子的分接头宽度有点太大了(对于标准面包板而言)。

幸运的是,这并不是什么大问题,但是你需要准备一束公对母跳线以及面包板。继续接通RFM95W模块和Raspberry Pi Pico。接线板上的引脚和你的Pico之间的映射应该如下所示:

PicoRP20401SX1276 ModuleRFM95W Breakout
3V3 (OUT)VCCVIN
GNDGNDGNDGND
Pin 10GP7DIO0G0
Pin 11GP8NSSCS
Pin 12GP9RESETRST
Pin 14GP10DIO1G1
Pin 21GP16 (SPI0 RX)MISOMISO
Pin 24GP18 (SPI0 SCK)SCKSCK
Pin 25GP19 (SPI0 TX)MOSIMOSI
物理引脚,RP2040引脚,SX1276模块和RFM95W扩展板之间的映射
注:这些引脚是库的默认引脚,可以在软件中更改。

构建和部署软件

现在,我们已经在云上建立了后端,并且我们已经物理上“构建”了无线电,我们可以构建和部署LoRaWAN应用程序。该库提供的示例应用程序之一将从RP2040微控制器上的传感器读取温度,并通过LoRaWAN无线电将其定期发送到你的Things Network应用程序。

void internal_temperature_init() {
    adc_init();
    adc_select_input(4);
    adc_set_temp_sensor_enabled(true);
}

float internal_temperature_get() {
    float adc_voltage = adc_read() * 3.3f / 4096;
    float adc_temperature = 27 - (adc_voltage - 0.706f) / 0.001721f;

    return adc_temperature;
}

继续,进入签出的otaa_temperature_led示例应用程序目录。这个例子用到了OTAA,所以我们需要Device EUI,Application EUI和Application Key。

$ cd examples/otaa_temperature_led/

打开config.h文件,在你喜欢的编辑和更改REGION,DEVICE_EUI,APP_EUI,并APP_KEY在网络控制台中显示的值。该代码期望使用(默认)字符串格式,十六进制数字之间没有空格,而不是字节数组表示形式。

在你喜欢的编辑器中打开config.h文件,并将REGION、DEVICE_EUI、APP_EUI和APP_KEY更改为网络控制台中显示的值。该字符串默认是中间没有空格的十六进制数字,而不是字节数组。

#define LORAWAN_REGION          LORAMAC_REGION_EU868
#define LORAWAN_DEVICE_EUI      "Insert your Device EUI"
#define LORAWAN_APP_EUI         "Insert your Application EUI"
#define LORAWAN_APP_KEY         "Insert your App Key"
#define LORAWAN_CHANNEL_MASK    NULL

我当前位于英国,LoRa广播频率为868MHz。

因此我要将区域设置为LORAMAC_REGION_EU868。

如果你在美国,则使用915MHz,因此需要将区域设置为LORAMAC_REGION_US915。

编辑config.h文件之后,就可以继续构建示例应用程序了。

$ cd ../..
$ mkdir build
$ cd build
$ cmake ..
$ make

如果一切顺利的话,你应该有一个UF2文件在build/examples/otaa_temperature_led/的目录,名字是pico_lorawan_otaa_temperature_led.uf2

现在,你可以按照常规方式将此UF2文件加载到树莓派Pico上。

先接好你的Raspberry Pi Pico开发板和Micro USB电缆,然后再将电缆的另一头插入有集成开发环境的电脑,按住Pico上的BOOTSEL按钮。插入后,松开按钮。

桌面上将会弹出一个名为RPI-RP2的磁盘。

双击将其打开,然后将UF2文件拖放到里面。如果遇到问题,请参阅《入门指南》第4章以 获取 更多信息。

Pico现在将运行LoRaWAN应用程序,如果需要,可以通过打开与Pico的USB串行连接来查看一些调试信息。打开终端窗口并启动 minicom

$ minicom -D /dev/ttyACM0

传送资料

但是,你需要转向Network控制台来查看真实的信息。你应该能看到一个初始连接消息,后面跟着一些帧。每一帧代表一个温度测量值通过LoRaWAN网关,从你的Pico发送到The Things Network网络应用。

有效负载值是Raspberry Pi Pico内部温度传感器以十六进制形式测得的温度。

这有点超出本文的讨论范围,但是你现在可以添加一个解码器和集成功能,使你可以将数据从十六进制解码为人类可读的数据,然后将其保存到数据库中。

为了说明你可以在此处执行的操作的强大功能,请转到应用程序的“有效载荷格式”标签,然后在“解码器”框中输入以下Javascript,然后向下滚动并点击绿色的“保存有效载荷功能”按钮。

function Decoder(bytes, port) {
 
  var decoded = {};
  decoded.temp = bytes[0];
  
  return decoded;
}

返回“数据”选项卡,你应该看到现在以十六进制表示的有效负载已经以摄氏温度为后缀。我们的简单解码器已将有效负载提取并将其转换回Javascript对象。

发送命令

除了发送温度数据之外,该示例应用程序还让你可以直接从The Things Network控制台切换Raspberry Pi Pico上的LED。

进入网络控制台的设备页面,在Downlink Payload框中输入“01”,并点击“发送”按钮。然后切换到Data选项卡。你应该会看到一个“Download scheduled”行,如果继续观察,你应该会看到下行的字节。

当这种情况发生时,你树莓派Pico上的LED应该会亮起!返回网络控制台并在有效载荷箱中输入“00”将(最终)关闭Pico的LED。

请记住,LoRaWAN是远程的,但带宽很低。你不要期望下行命令能即时响应。

接下来还有什么

OTAA示例应用程序是一个非常好的框架,你可以在此基础上构建它,它允许你获取数据并通过LoRa将其发送到云端,还可以从云端向支持LoRa的Pico发送命令。

地址:https://github.com/sandeepmistry/pico-lorawan/tree/main/examples/otaa_temperature_led

小结

可以在树莓派论坛上找到对Pico开发的支持。还有一个(非官方的)Discord频道,很多活跃在社区的人似乎都在那里玩。

地址:https://discord.com/invite/avzEvd6Euv

关于文档的反馈应该作为一个问题发布到GitHub上的pico-feedback仓库,或者直接发布到它关注的相关仓库。

所有的文档,以及其他帮助和链接,都可以在入门页面上找到。

如果你不知道未来它在哪里,你总是可以从你的Pico找到它。如果你要访问相关页面,只需按住你Pico上的BOOTSEL按钮,把它插到你的笔记本电脑或树莓派上,然后释放按钮。最后打开RPI-RP2盘符,单击INDEX.HTM文件。

它将把你带到入门页。