想在树莓派上跑Julia?没问题。

Julia是一款开源通用编程语言,专为科学计算而设计。它结合了 Python 和 Ruby 等高级语言的易用性,以及 C 的速度。Julia 是大学开发研究的理想选择,从本科到博士都可以考虑它。

其实在2017年,该语言的创造者之一Viral Shah就跟 Raspberry Pi 基金会取得了联系,并将 Julia 移植到了 ARM 平台,特别是针对 Raspberry Pi。从那时起,他们出色的完成了对 ARM 平台以及树莓派的支持。

而树莓派基金会也将Julia正式的纳入了Raspberry Pi OS的软件库,大家可以直接用APT安装了。

现在Julia 团队不仅将语言本身移植到 Pi,而且还增加了对GPIOSense HATMinecraft的支持。

Julia 开发人员之一 Simon 首先将 Julia 徽标加载到Jupyter 笔记本中的矩阵,然后将其显示在 Sense HAT LED 矩阵上。然后他做了一些矩阵变换,Sense HAT 显示了这些操作的效果。

可以使用以下命令在 Raspberry Pi 上安装 Julia:

sudo apt update
sudo apt install julia

为 Julia 安装 Jupyter notebook:

sudo apt install julia libzmq3-dev python3-zmq
sudo pip3 install jupyter
julia -e 'Pkg.add("IJulia");'

也可以从 Julia 控制台轻松安装额外的软件包:

Pkg.add("SenseHat")

Julia 团队还创建了一个资源网站,用于在 Pi 上开始使用 Julia:juliaberry.github.io

好了,Julia开发者们。在树莓派上用起来吧。

Jetson Nano开发AI应用的认证课程

NVIDIA的深度学习学院(DLI)为边缘计算开发人员,教育者,学生和终身学习者提供了实用的,动手的AI培训和认证。 

Jetson AI部分,NVIDIA提供了两种认证:

一、任何人都可以完成的”Jetson AI专家认证,即Jetson AI Specialist
二、是针对教育工作者的的Jetson AI大使认证,即Jetson AI Ambassador

课程介绍

如今,世界各地使用 NVIDIA Jetson Nano 开发者套件的创客、自学开发者和嵌入式技术爱好者均已掌握 AI 的强大力量。借助这款简单易用而又功能强大的计算机,您将可在图像分类、物体检测、分割和语音处理等应用中并行运行多个神经网络。在本课程中,您将在自己的 Jetson Nano 上使用 Jupyter iPython notebook 构建基于计算机视觉模型的深度学习分类项目。

您将学习如何:

  • 安装 Jetson Nano 和相机
  • 为分类模型采集图像数据
  • 为回归模型注释图像数据
  • 基于您的数据训练神经网络,以创建模型
  • 使用您创建的模型在 Jetson Nano 上运行推理

完成课程学习后,您将能使用 Jetson Nano 创建深度学习分类和回归模型。

培训证书

成功完成本课程和测试后,您将获得 NVIDIA DLI 证书,以证明您在这一主题领域的技能,助力您的职业发展。

课程模式

个人在线自主学习,课程包含视频和代码示及练习例等

课程详情

预备知识:了解 Python 的基础知识(会有帮助,但非必需)

工具、库和框架:PyTorch、Jetson Nano

课程时长:6 学时(课件有效期 6 个月)

课程语言:中文

课程价格:免费

您需要准备好的硬件

  • NVIDIA Jetson Nano 开发者套件
  • 高性能 microSD 卡:最小 32GB(我们已测试并推荐此产品
  • 5V 4A 电源和 2.1 毫米直流桶式连接器(我们已测试并推荐此产品
  • 2 针跳线:必须添加到 Jetson Nano 开发者套件主板,以使桶式插座电源供电(此处为产品示例
  • Logitech C270 USB 网络摄像头(我们已测试并推荐 此产品) 。
  • USB 线缆:Micro-B 至 Type-A,支持数据传输(我们已测试并推荐此产品
  • 一台能以闪存形式向 microSD 卡写入数据的联网计算机

树莓派GPIO控制 —— C语言篇

一. 常用开源工程简介

树莓派内核中已经编译自带了gpio的驱动,我们常通过一些第三方写好的库函数来完成具体的操作,比较常见的操作库函数有:

  1. Python GPIO
    【开发语言】——python
    【简单介绍】——树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作,但是python GPIO库还没有支持SPI. I2C或者1-wire等总线接口。
    【官方网站】—— https://code.google.com/p/raspberry-gpio-python/
  2. wiringPi
    【开发语言】——C语言
    【简单介绍】——wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和arduino非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码,这些示例代码也包括UART设备,I2C设备和SPI设备等。
    【官方网站】—— http://wiringpi.com/
  3. BCM2835 C Library
    【开发语言】——C语言
    【简单介绍】BCM2835 C Library可以理解为使用C语言实现的相关底层驱动,BCM2835 C Library的驱动库包括GPIO. SPI和UART等,可以通过学习BCM2835 C Library熟悉BCM2835相关的寄存器操作。如果有机会开发树莓派上的linux驱动,或自主开发python或PHP扩展驱动,可以从BCM2835 C Library找到不少的“灵感”。
    【官方网站】—— http://www.airspayce.com/mikem/bcm2835/

    . 树莓派GPIO编号方式
  1. 功能物理引脚:
    从左到右,从上到下:左边基数,右边偶数:1-40
  2. BCM:
    编号侧重CPU寄存器,根据BCM2835的GPIO寄存器编号。
  3. wiringpi:
    编号侧重实现逻辑,把扩展GPIO端口从0开始编号,这种编号方便编程。正如图3 WiringPi一栏。

    三. WiringPi GPIO
  1. 说明:
    WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3。wiringPi使用C或者C++开发并且可以被其他语言包转,例如python. ruby或者PHP等。
    wiringPi包括一套gpio控制命令,使用gpio命令可以控制树莓派GPIO管脚。用户可以利用gpio命令通过shell脚本控制或查询GPIO管脚。
  2. wiringPi安装
     1)使用GIT工具
    git clone git://git.drogon.net/wiringPi
    cd wiringPi
    ./build
    build脚本会帮助你编译和安装wiringPi

     2)直接下载
    在https://git.drogon.net/?p=wiringPi;a=summary下载最新版本编译使用
    tar xfz wiringPi-xx.tar.gz
    cd wiringPi-xx
    ./build

     3)raspbian使用apt-get安装
    sudo apt-get install wiringpi
  3. 测试:
    wiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。
    $gpio -v
    $gpio readall #即可出现下面的gpio图
  1. 样例代码:
#include <wiringPi.h>
int main(void)
{
 wiringPiSetup() ;
 pinMode (0, OUTPUT) ;
 for(;;)
 {
  digitalWrite(0, HIGH) ; delay (500) ;
  digitalWrite(0, LOW) ; delay (500) ;
 }
}
  1. 编译运行:
    在树莓派上:
    gcc -Wall -o test test.c -lwiringPi
    sudo ./test

在虚拟机中:
am-linux-gcc -Wall -o test test.c -lwiringPi
sudo ./test

注:
1)IO的编号方式略有不同,采用wiring编码方式。
2)-lwiringPi表示动态加载wiringPi共享库。

四. BCM2835 C Library
下载:
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.35.tar.gz
解压缩:
$tar xvzf bcm2835-1.35.tar.gz
进入压缩之后的目录:
$cd bcm2835-1.35
配置编译:
./configuremake
执行检查:
$sudo make check
安装bcm2835库:
$sudo make install

样例代码

#include < bcm2835.h>
//P1插座第11脚
#define PIN RPI_GPIO_P1_11
int main(int argc, char **argv)
{
  if (!bcm2835_init())
   return 1;

 // 输出方式
 bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);

 while (1)
 {
   bcm2835_gpio_write(PIN, HIGH);
  bcm2835_delay(100);

  bcm2835_gpio_write(PIN, LOW);
  bcm2835_delay(100);
 }
 bcm2835_close();
 return 0;
}

编译运行
gcc -o blink blink.c -lbcm2835
./blink

注:
1)IO的编号方式略有不同,采用BCM编码方式
2)-lbcm2835表示动态加载bcm2835共享库

参考链接:

http://elinux.org/RPi_Low-level_peripherals
http://blog.csdn.net/xukai871105/article/details/23115627

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前哨站和我交流。

Windows装不上Wordcloud?看这里

如果你是一个写Python,且又喜欢做词云的朋友。

你应该遇到过Windows上跑不动你词云程序的情况,比如你可能在装Wordcloud时候会遇到如下情况:

虽然网上也有一些教程,但好像都不是很清晰。

有的教程,干脆让我们先去下载一个微软的Visual Studio……

其实,就差一个C++生成工具。

而这个工具包含在了Build tools这么个套件里面。

下载地址:

https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16

打开以后不要慌,选中这个勾就行。

如果你的硬盘不富裕,就别全选了,继续往后边看。

我一般是选这几个。

然后,该程序会提醒你。要下载4.4GB左右的组件包。

管你要不要,反正它要下载。

好的一点是,它可以边下边安装,总算能节约一点时间。

下载完成后要重启生效。

然后,你的wordcloud就可以装上了。

下面写段代码测试一下:

from wordcloud import WordCloud

f = open('text.txt','r',encoding='utf8').read()
wordcloud = WordCloud(background_color="white",width=800, height=600, margin=2).generate(f)

# width,height,margin可以设置图片属性
wordcloud = WordCloud(font_path = r'simsun.ttf').generate(f)
# 你可以通过font_path参数来设置字体集
#background_color参数为设置背景颜色,默认颜色为黑色

import matplotlib.pyplot as plt
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

wordcloud.to_file('test.png')

能生成词云了,只是不够好看,得再调整一下。

更多精彩内容,欢迎关注“IoT前哨站”的微博和公众号。我是王文文。

树莓派挖矿教程之Chia篇

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

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

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

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

基本配置:

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

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

大容量硬盘一块

步骤:

先到chia.net下载工具。

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

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

安装完启动该程序。

别忘了24个助记词。

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

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

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

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

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

用Python实现经典游戏《小蜜蜂》

估计很多老玩家在小时候都玩过Galaxian(小蜜蜂)吧。这款射击游戏的鼻祖叫《太空侵略者》,上手简单,但可玩性很强。

高手用C语言精准复现的1978年《太空侵略者》版本

《太空侵略者》大火之后,新推出的Galaxian(小蜜蜂)于1979年成为其最大竞争对手。由Namco发行的Galaxian为外星敌人提供了新的色彩和不可预测的动作,后者不但会发射炮弹,还会自杀式俯冲攻击。

《Galaxian》在街机游戏中大受欢迎,以至于Namco在两年后又发布了续作《Galaga》——这款游戏使攻击模式更加复杂。

很难说《Galaxian》究竟有多少移植和克隆的版本,因为几乎每个家用游戏机上都有类似版本。

小霸王平台的《Galaxian》

玩家在《Galaxian》中的角色与《太空侵略者》类似,驾驶一艘飞船与一支外星舰队战斗。

与《太空侵略者》不同的是,在《Galaxian》中,外星人总会打破队形向玩家的飞船发起俯冲轰炸。

玩家需要摧毁所有敌人,然后进入下一关。随着玩家的推进,一波又一波的敌人将让过关变得更加困难。

我们这里将着眼于外星人的俯冲机制,用Pygame Zero开发《Galaxian》游戏的核心功能。

用Pygame Zero开发的版本

首先,《Galaxian》拥有一个纵向显示画面,所以我们将游戏区域的宽度和高度分别设置为600和800。

接下来,我们可以用位图创建一个滚动的星空背景。​将位图逐渐往屏幕下方移动,用第二颗恒星来填充第一颗恒星向下滚动时留下的空间,我们还可以在后面添加另一个静态背景图像,这将提供一些视野深度。

然后,我们将玩家的飞船设置为Actor。并在update()函数中捕获左右箭头键,以便在屏幕上左右移动飞船。我们也可以用空格键发射子弹,子弹会沿屏幕向上移动,直到击中外星人或离开屏幕顶部。

和原版《Galaxian》一样,你一次只能发射一颗炮弹,所以我们只需要一个Actor。

外星人排成一行,一起在屏幕上左右移动。在这个例子中,我们只画一种类型的外星人,共画两行。你可以添加额外的类型和任意多行。当我们创建alien Actors时,我们还可以添加一个状态标志,我们需要确定当它们打破队形时,它们在行的哪一边,两边朝相反的方向飞行。在这种情况下,每行左边有4个外星人,右边有4个。

一旦它们在列表中建立起来,我们就可以在每次更新时遍历列表,并向前或向后移动它们。

当我们在移动外星人时,我们也可以查看它们是否与炮弹或玩家飞船相撞。

如果与炮弹碰撞,那么外星人将使用状态标志连续播放爆炸的那几帧,当状态达到5时,它们将不再被绘制到界面上。

如果碰撞发生在玩家的飞船身上,那么玩家会死亡,游戏也就结束了。

我们也可以检查一个随机数,看看外星人是否开始轰炸。如果是,我们将状态设置为1,这将开始调用flyAlien()函数。这个函数会检查外星人的位置,并根据侧边的不同改变外星人的角度,然后根据角度更改x和y坐标。为了方便大家看明白,我们这里处理的比较简单,你也可以使用一些乘数变量将其折叠到x坐标和角度上,将其收窄。

相关代码:

https://github.com/IoToutpost/Python_game

要运行调试请先安装Pygame Zero。

现在大家应该初步掌握了Galaxian游戏的基础知识。你可以试着完善它了。

如何让树莓派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文件。

它将把你带到入门页。

可将照片自动同步到苹果电脑的PiPhoto

用传统数码相机拍完照总是要导照片,但要把SD卡上的照片导到苹果电脑上并不容易。一般都得要USB转接头什么的。

如果拍完照,能直接通过网络,自动同步SD卡里的照片到电脑上,那该多好啊。

别担心,PiPhoto可以帮你实现这个需求。

自动化解决方案

一名名叫Lou Kratz的国外网友几乎每个周末都花很多时间在镜头前记录自己的冒险经历。但是他受不了每次都手动导入,所以他发明了PiPhoto,使流程自动化。

视频地址:

从视频中你可以看到,Lou Kratz用了一个非常简单的方案。只需将SD卡插入Raspberry Pi中,照片就会自动上传到计算机上。

树莓派上的LED用于显示状态:

在处理过程中,绿色指示灯将开始闪烁。绿色常亮表示作业成功,红色闪烁表示作业失败。

相关代码:

https://github.com/IoToutpost/pi-photo-sync

安装步骤:

下载代码,在树莓派上运行:
sudo ./install.sh

创建一个新的配置文件,并对其进行编辑。:
sudo cp config/piphoto.conf.example /etc/piphoto.conf

需要设置的变量是:
mount_point – SD卡的安装位置(应与以下udev规则中的位置相匹配。)
run_as_user – 用于运行同步程序的用户。
sync_command – 运行什么命令来同步照片。(请参见上面的目标)。

作者最新的改进可以让Raspberry Pi按日期整理所上传的照片,具体用法可参考代码。

树莓派支持Visual Studio Code了

作为开发者来说,IDE是一个必不可少的工具。

不过大部分火力强劲的IDE都是跑在x86架构上的,除非某些大厂为了兼容自己的产品,否则鲜有支持其它架构的大众流行IDE。

没想到的是,最近树莓派官方支持VS Code了。

VS Code是一款免费的开源IDE,最初是为x86架构的Windows,macOS和Linux准备的。开箱即用,支持常规文本编辑和git源代码控制,本地或远程调试。扩展功能强大,可支持JS、Python、Golang等广泛的编程语言。

如果你的树莓派正在运行Raspberry Pi OS ,那现在只需要运行两条命令,VS Code就能在你的系统上跑起来了。

sudo apt update 
sudo apt install code -y

安装VS Code之后,你可以从Raspberry Pi菜单中的Programming目录里运行它。

顺便说一句,尽量用4GB内存或更高版本的树莓派哦。