标签 树莓派 下的文章

在你的下一个树莓派项目上安装和配置流行的开源数据库 Postgres 并去使用它。

 title=

保存你的项目或应用程序持续增加的数据,数据库是一种很好的方式。你可以在一个会话中将数据写入到数据库,并且在下次你需要查找的时候找到它。一个设计良好的数据库可以做到在巨大的数据集中高效地找到数据,只要告诉它你想去找什么,而不用去考虑它是如何查找的。为一个基本的 CRUD (创建、记录、更新、删除)应用程序安装一个数据库是非常简单的, 它是一个很通用的模式,并且也适用于很多项目。

为什么 PostgreSQL 一般被为 Postgres? 它被认为是功能和性能最好的开源数据库。如果你使用过 MySQL,它们是很相似的。但是,如果你希望使用它更高级的功能,你会发现优化 Postgres 是比较容易的。它便于安装、容易使用、方便安全, 而且在树莓派 3 上运行的非常好。

本教程介绍了怎么在一个树莓派上去安装 Postgres;创建一个表;写简单查询;在树莓派、PC,或者 Mac 上使用 pgAdmin 图形用户界面;从 Python 中与数据库交互。

你掌握了这些基础知识后,你可以让你的应用程序使用复合查询连接多个表,那个时候你需要考虑的是,怎么去使用主键或外键优化及最佳实践等等。

安装

一开始,你将需要去安装 Postgres 和一些其它的包。打开一个终端窗口并连接到因特网,然后运行以下命令:

sudo apt install postgresql libpq-dev postgresql-client 
postgresql-client-common -y

 title=

当安装完成后,切换到 Postgres 用户去配置数据库:

sudo su postgres

现在,你可以创建一个数据库用户。如果你创建了一个与你的 Unix 用户帐户相同名字的用户,那个用户将被自动授权访问该数据库。因此在本教程中,为简单起见,我们将假设你使用了默认用户 pi 。运行 createuser 命令以继续:

createuser pi -P --interactive

当得到提示时,输入一个密码 (并记住它), 选择 n 使它成为一个非超级用户(LCTT 译注:此处原文有误),接下来两个问题选择 y(LCTT 译注:分别允许创建数据库和其它用户)。

 title=

现在,使用 Postgres shell 连接到 Postgres 去创建一个测试数据库:

$ psql
> create database test;

按下 Ctrl+D 两次从 psql shell 和 postgres 用户中退出,再次以 pi 用户登入。你创建了一个名为 pi 的 Postgres 用户后,你可以从这里无需登录凭据即可访问 Postgres shell:

$ psql test

你现在已经连接到 "test" 数据库。这个数据库当前是空的,不包含任何表。你可以在 psql shell 里创建一个简单的表:

test=> create table people (name text, company text);

现在你可插入数据到表中:

test=> insert into people values ('Ben Nuttall', 'Raspberry Pi Foundation');

test=> insert into people values ('Rikki Endsley', 'Red Hat');

然后尝试进行查询:

test=> select * from people;

     name      |         company         
---------------+-------------------------
 Ben Nuttall   | Raspberry Pi Foundation
 Rikki Endsley | Red Hat
(2 rows)

 title=

test=> select name from people where company = 'Red Hat';

     name      | company 
---------------+---------
 Rikki Endsley | Red Hat
(1 row)

pgAdmin

如果希望使用一个图形工具去访问数据库,你可以使用它。 PgAdmin 是一个全功能的 PostgreSQL GUI,它允许你去创建和管理数据库和用户、创建和修改表、执行查询,和如同在电子表格一样熟悉的视图中浏览结果。psql 命令行工具可以很好地进行简单查询,并且你会发现很多高级用户一直在使用它,因为它的执行速度很快 (并且因为他们不需要借助 GUI),但是,一般用户学习和操作数据库,使用 pgAdmin 是一个更适合的方式。

关于 pgAdmin 可以做的其它事情:你可以用它在树莓派上直接连接数据库,或者用它在其它的电脑上远程连接到树莓派上的数据库。

如果你想去访问树莓派,你可以用 apt 去安装它:

sudo apt install pgadmin3

它是和基于 Debian 的系统如 Ubuntu 是完全相同的;如果你在其它发行版上安装,尝试与你的系统相关的等价的命令。 或者,如果你在 Windows 或 macOS 上,尝试从 pgAdmin.org 上下载 pgAdmin。注意,在 apt 上的可用版本是 pgAdmin3,而最新的版本 pgAdmin4,在其网站上可以找到。

在同一台树莓派上使用 pgAdmin 连接到你的数据库,从主菜单上简单地打开 pgAdmin3 ,点击 new connection 图标,然后完成注册,这时,你将需要一个名字(连接名,比如 test),改变用户为 “pi”,然后剩下的输入框留空 (或者如它们原本不动)。点击 OK,然后你在左侧的侧面版中将发现一个新的连接。

 title=

要从另外一台电脑上使用 pgAdmin 连接到你的树莓派数据库上,你首先需要编辑 PostgreSQL 配置允许远程连接:

1、 编辑 PostgreSQL 配置文件 /etc/postgresql/9.6/main/postgresql.conf ,取消 listen_addresses 行的注释,并把它的值从 localhost 改变成 *。然后保存并退出。

2、 编辑 pg\_hba 配置文件 /etc/postgresql/9.6/main/postgresql.conf,将 127.0.0.1/32 改变成 0.0.0.0/0 (对于IPv4)和将 ::1/128 改变成 ::/0 (对于 IPv6)。然后保存并退出。

3、 重启 PostgreSQL 服务: sudo service postgresql restart

注意,如果你使用一个旧的 Raspbian 镜像或其它发行版,版本号可能不一样。

 title=

做完这些之后,在其它的电脑上打开 pgAdmin 并创建一个新的连接。这时,需要提供一个连接名,输入树莓派的 IP 地址作为主机(这可以在任务栏的 WiFi 图标上悬停鼠标找到,或者在一个终端中输入 hostname -I 找到)。

 title=

不论你连接的是本地的还是远程的数据库,点击打开 Server Groups > Servers > test > Schemas > public > Tables,右键单击 people 表,然后选择 View Data > View top 100 Rows。你现在将看到你前面输入的数据。

 title=

你现在可以创建和修改数据库和表、管理用户,和使用 GUI 去写你自己的查询了。你可能会发现这种可视化方法比命令行更易于管理。

Python

要从一个 Python 脚本连接到你的数据库,你将需要 Psycopg2 这个 Python 包。你可以用 pip 来安装它:

sudo pip3 install psycopg2

现在打开一个 Python 编辑器写一些代码连接到你的数据库:

import psycopg2

conn = psycopg2.connect('dbname=test')
cur = conn.cursor()

cur.execute('select * from people')

results = cur.fetchall()

for result in results:
    print(result)

运行这个代码去看查询结果。注意,如果你连接的是远程数据库,在连接字符串中你将需要提供更多的凭据,比如,增加主机 IP、用户名,和数据库密码:

conn = psycopg2.connect('host=192.168.86.31 user=pi 
password=raspberry dbname=test')

你甚至可以创建一个函数去运行特定的查询:

def get_all_people():
    query = """
    SELECT
        *
    FROM
        people
    """
    cur.execute(query)
    return cur.fetchall()

和一个包含参数的查询:

def get_people_by_company(company):
    query = """
    SELECT
        *
    FROM
        people
    WHERE
        company = %s
    """
    values = (company, )
    cur.execute(query, values)
    return cur.fetchall()

或者甚至是一个增加记录的函数:

def add_person(name, company):
    query = """
    INSERT INTO
        people
    VALUES
        (%s, %s)
    """
    values = (name, company)
    cur.execute(query, values)

注意,这里使用了一个注入字符串到查询中的安全的方法, 你不希望被 小鲍勃的桌子 害死!

 title=

现在你知道了这些基础知识,如果你想去进一步掌握 Postgres ,查看在 Full Stack Python 上的文章。

(题图:树莓派基金会)


作者简介:

Ben Nuttall - 树莓派社区的管理者。除了它为树莓派基金会所做的工作之外 ,他也投入开源软件、数学、皮艇运动、GitHub、探险活动和 Futurama。在 Twitter @ben\_nuttall 上关注他。


via: https://opensource.com/article/17/10/set-postgres-database-your-raspberry-pi

作者:Ben Nuttall 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这篇博文将向你展示如何使用 Docker 和 OpenFaaS 框架构建你自己的 Serverless 树莓派集群。大家常常问我能用他们的集群来做些什么?而这个应用完美匹配卡片尺寸的设备——只需添加更多的树莓派就能获取更强的计算能力。

“Serverless” (无服务器)是事件驱动架构的一种设计模式,与“桥接模式”、“外观模式”、“工厂模式”和“云”这些名词一样,都是一种抽象概念。

图片:3 个 Raspberry Pi Zero

这是我在本文中描述的集群,用黄铜支架分隔每个设备。

Serverless 是什么?它为何重要?

行业对于 “serverless” 这个术语的含义有几种解释。在这篇博文中,我们就把它理解为一种事件驱动的架构模式,它能让你用自己喜欢的任何语言编写轻量可复用的功能。更多关于 Serverless 的资料

Serverless 架构也引出了“功能即服务服务”模式,简称 FaaS

Serverless 的“功能”可以做任何事,但通常用于处理给定的输入——例如来自 GitHub、Twitter、PayPal、Slack、Jenkins CI pipeline 的事件;或者以树莓派为例,处理像红外运动传感器、激光绊网、温度计等真实世界的传感器的输入。

Serverless 功能能够更好地结合第三方的后端服务,使系统整体的能力大于各部分之和。

了解更多背景信息,可以阅读我最近一偏博文:功能即服务(FaaS)简介

概述

我们将使用 OpenFaaS,它能够让主机或者集群作为支撑 Serverless 功能运行的后端。任何能够使用 Docker 部署的可执行二进制文件、脚本或者编程语言都能在 OpenFaaS 上运作,你可以根据速度和伸缩性选择部署的规模。另一个优点是,它还内建了用户界面和监控系统。

这是我们要执行的步骤:

  • 在一个或多个主机上配置 Docker (树莓派 2 或者 3);
  • 利用 Docker Swarm 将它们连接;
  • 部署 OpenFaaS
  • 使用 Python 编写我们的第一个功能。

Docker Swarm

Docker 是一项打包和部署应用的技术,支持集群上运行,有着安全的默认设置,而且在搭建集群时只需要一条命令。OpenFaaS 使用 Docker 和 Swarm 在你的可用树莓派上传递你的 Serverless 功能。

我推荐你在这个项目中使用带树莓派 2 或者 3,以太网交换机和强大的 USB 多端口电源适配器

准备 Raspbian

Raspbian Jessie Lite 写入 SD 卡(8GB 容量就正常工作了,但还是推荐使用 16GB 的 SD 卡)。

注意:不要下载成 Raspbian Stretch 了

社区在努力让 Docker 支持 Raspbian Stretch,但是还未能做到完美运行。请从树莓派基金会网站下载 Jessie Lite 镜像。

我推荐使用 Etcher.io 烧写镜像。

在引导树莓派之前,你需要在引导分区创建名为 ssh 的空白文件。这样才能允许远程登录。

接通电源,然后修改主机名

现在启动树莓派的电源并且使用 ssh 连接:

$ ssh [email protected]

默认密码是 raspberry

使用 raspi-config 工具把主机名改为 swarm-1 或者类似的名字,然后重启。

当你到了这一步,你还可以把划分给 GPU (显卡)的内存设置为 16MB。

现在安装 Docker

我们可以使用通用脚本来安装:

$ curl -sSL https://get.docker.com | sh
这个安装方式在将来可能会发生变化。如上文所说,你的系统需要是 Jessie,这样才能得到一个确定的配置。

你可能会看到类似下面的警告,不过你可以安全地忽略它并且成功安装上 Docker CE 17.05:

WARNING: raspbian is no longer updated @ https://get.docker.com/  
Installing the legacy docker-engine package...  

之后,用下面这个命令确保你的用户帐号可以访问 Docker 客户端:

$ usermod pi -aG docker
如果你的用户名不是 pi,那就把它替换成你的用户名。

修改默认密码

输入 $sudo passwd pi,然后设置一个新密码,请不要跳过这一步!

重复以上步骤

现在为其它的树莓派重复上述步骤。

创建你的 Swarm 集群

登录你的第一个树莓派,然后输入下面的命令:

$ docker swarm init
Swarm initialized: current node (3ra7i5ldijsffjnmubmsfh767) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-496mv9itb7584pzcddzj4zvzzfltgud8k75rvujopw15n3ehzu-af445b08359golnzhncbdj9o3 \
    192.168.0.79:2377

你会看到它显示了一个口令,以及其它节点加入集群的命令。接下来使用 ssh 登录每个树莓派,运行这个加入集群的命令。

等待连接完成后,在第一个树莓派上查看集群的节点:

$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS  
3ra7i5ldijsffjnmubmsfh767 *   swarm1              Ready               Active              Leader  
k9mom28s2kqxocfq1fo6ywu63     swarm3              Ready               Active  
y2p089bs174vmrlx30gc77h4o     swarm4              Ready               Active  

恭喜你!你现在拥有一个树莓派集群了!

更多关于集群的内容

你可以看到三个节点启动运行。这时只有一个节点是集群管理者。如果我们的管理节点死机了,集群就进入了不可修复的状态。我们可以通过添加冗余的管理节点解决这个问题。而且它们依然会运行工作负载,除非你明确设置了让你的服务只运作在工作节点上。

要把一个工作节点升级为管理节点,只需要在其中一个管理节点上运行 docker node promote <node_name> 命令。

注意: Swarm 命令,例如 docker service ls 或者 docker node ls 只能在管理节点上运行。

想深入了解管理节点与工作节点如何保持一致性,可以查阅 Docker Swarm 管理指南

OpenFaaS

现在我们继续部署程序,让我们的集群能够运行 Serverless 功能。OpenFaaS 是一个利用 Docker 在任何硬件或者云上让任何进程或者容器成为一个 Serverless 功能的框架。因为 Docker 和 Golang 的可移植性,它也能很好地运行在树莓派上。

如果你支持 OpenFaaS,希望你能 星标 OpenFaaS 的 GitHub 仓库。

登录你的第一个树莓派(你运行 docker swarm init 的节点),然后部署这个项目:

$ git clone https://github.com/alexellis/faas/
$ cd faas
$ ./deploy_stack.armhf.sh
Creating network func_functions  
Creating service func_gateway  
Creating service func_prometheus  
Creating service func_alertmanager  
Creating service func_nodeinfo  
Creating service func_markdown  
Creating service func_wordcount  
Creating service func_echoit  

你的其它树莓派会收到 Docer Swarm 的指令,开始从网上拉取这个 Docker 镜像,并且解压到 SD 卡上。这些工作会分布到各个节点上,所以没有哪个节点产生过高的负载。

这个过程会持续几分钟,你可以用下面指令查看它的完成状况:

$ watch 'docker service ls'
ID                  NAME                MODE                REPLICAS            IMAGE                                   PORTS  
57ine9c10xhp        func_wordcount      replicated          1/1                 functions/alpine:latest-armhf  
d979zipx1gld        func_prometheus     replicated          1/1                 alexellis2/prometheus-armhf:1.5.2       *:9090->9090/tcp  
f9yvm0dddn47        func_echoit         replicated          1/1                 functions/alpine:latest-armhf  
lhbk1fc2lobq        func_markdown       replicated          1/1                 functions/markdownrender:latest-armhf  
pj814yluzyyo        func_alertmanager   replicated          1/1                 alexellis2/alertmanager-armhf:0.5.1     *:9093->9093/tcp  
q4bet4xs10pk        func_gateway        replicated          1/1                 functions/gateway-armhf:0.6.0           *:8080->8080/tcp  
v9vsvx73pszz        func_nodeinfo       replicated          1/1                 functions/nodeinfo:latest-armhf  

我们希望看到每个服务都显示 “1/1”。

你可以根据服务名查看该服务被调度到哪个树莓派上:

$ docker service ps func_markdown
ID                  IMAGE                                   NODE    STATE  
func_markdown.1     functions/markdownrender:latest-armhf   swarm4  Running  

状态一项应该显示 Running,如果它是 Pending,那么镜像可能还在下载中。

在这时,查看树莓派的 IP 地址,然后在浏览器中访问它的 8080 端口:

$ ifconfig

例如,如果你的 IP 地址是 192.168.0.100,那就访问 http://192.168.0.100:8080

这是你会看到 FaaS UI(也叫 API 网关)。这是你定义、测试、调用功能的地方。

点击名称为 “func\_markdown” 的 Markdown 转换功能,输入一些 Markdown(这是 Wikipedia 用来组织内容的语言)文本。

然后点击 “invoke”。你会看到调用计数增加,屏幕下方显示功能调用的结果。

部署你的第一个 Serverless 功能:

这一节的内容已经有相关的教程,但是我们需要几个步骤来配置树莓派。

获取 FaaS-CLI

$ curl -sSL cli.openfaas.com | sudo sh
armv7l  
Getting package https://github.com/alexellis/faas-cli/releases/download/0.4.5-b/faas-cli-armhf  

下载样例

$ git clone https://github.com/alexellis/faas-cli
$ cd faas-cli

为树莓派修补样例模版

我们临时修改我们的模版,让它们能在树莓派上工作:

$ cp template/node-armhf/Dockerfile template/node/
$ cp template/python-armhf/Dockerfile template/python/

这么做是因为树莓派和我们平时关注的大多数计算机使用不一样的处理器架构。

了解 Docker 在树莓派上的最新状况,请查阅: 你需要了解的五件事

现在你可以跟着下面为 PC、笔记本和云端所写的教程操作,但我们在树莓派上要先运行一些命令。

注意第 3 步:

  • 把你的功能放到先前从 GitHub 下载的 faas-cli 文件夹中,而不是 ~/functinos/hello-python 里。
  • 同时,在 stack.yml 文件中把 localhost 替换成第一个树莓派的 IP 地址。

集群可能会花费几分钟把 Serverless 功能下载到相关的树莓派上。你可以用下面的命令查看你的服务,确保副本一项显示 “1/1”:

$ watch 'docker service ls'
pv27thj5lftz        hello-python        replicated          1/1                 alexellis2/faas-hello-python-armhf:latest  

继续阅读教程: 使用 OpenFaaS 运行你的第一个 Serverless Python 功能

关于 Node.js 或者其它语言的更多信息,可以进一步访问 FaaS 仓库

检查功能的指标

既然使用 Serverless,你也不想花时间监控你的功能。幸运的是,OpenFaaS 内建了 Prometheus 指标检测,这意味着你可以追踪每个功能的运行时长和调用频率。

指标驱动自动伸缩

如果你给一个功能生成足够的负载,OpenFaaS 将自动扩展你的功能;当需求消失时,你又会回到单一副本的状态。

这个请求样例你可以复制到浏览器中:

只要把 IP 地址改成你的即可。

http://192.168.0.25:9090/graph?g0.range_input=15m&g0.stacked=1&g0.expr=rate(gateway_function_invocation_total%5B20s%5D)&g0.tab=0&g1.range_input=1h&g1.expr=gateway_service_count&g1.tab=0  

这些请求使用 PromQL(Prometheus 请求语言)编写。第一个请求返回功能调用的频率:

rate(gateway_function_invocation_total[20s])  

第二个请求显示每个功能的副本数量,最开始应该是每个功能只有一个副本。

gateway_service_count  

如果你想触发自动扩展,你可以在树莓派上尝试下面指令:

$ while [ true ]; do curl -4 localhost:8080/function/func_echoit --data "hello world" ; done

查看 Prometheus 的 “alerts” 页面,可以知道你是否产生足够的负载来触发自动扩展。如果没有,你可以尝试在多个终端同时运行上面的指令。

当你降低负载,副本数量显示在你的第二个图表中,并且 gateway_service_count 指标再次降回 1。

结束演讲

我们现在配置好了 Docker、Swarm, 并且让 OpenFaaS 运行代码,把树莓派像大型计算机一样使用。

希望大家支持这个项目,星标 FaaS 的 GitHub 仓库

你是如何搭建好了自己的 Docker Swarm 集群并且运行 OpenFaaS 的呢?在 Twitter @alexellisuk 上分享你的照片或推文吧。

观看我在 Dockercon 上关于 OpenFaaS 的视频

我在 Austin 的 Dockercon 上展示了 OpenFaaS。——观看介绍和互动例子的视频: https://www.youtube.com/embed/-h2VTE9WnZs

有问题?在下面的评论中提出,或者给我发邮件,邀请我进入你和志同道合者讨论树莓派、Docker、Serverless 的 Slack channel。

想要学习更多关于树莓派上运行 Docker 的内容?

我建议从 你需要了解的五件事 开始,它包含了安全性、树莓派和普通 PC 间微妙差别等话题。


via: https://blog.alexellis.io/your-serverless-raspberry-pi-cluster/

作者:Alex Ellis 译者:haoqixu 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

怎样在家用 Python 和树莓派搭建一个家用便携的自制酿啤酒装置

 title=

大约十年前我开始酿制自制啤酒,和许多自己酿酒的人一样,我开始在厨房制造提纯啤酒。这需要一些设备并且做出来后确实是好的啤酒,最终,我用一个放入了所有大麦的大贮藏罐作为我的麦芽浆桶。几年之后我一次酿制过 5 加仑啤酒,但是酿制 10 加仑时也会花费同样的时间和效用(只是容器比之前大些),之前我就是这么做的。容量提升到 10 加仑之后,我偶然看到了 StrangeBrew Elsinore ,我意识到我真正需要的是将整个酿酒过程转换成全电子化的,用树莓派来运行它。

建造自己的家用电动化酿酒系统需要大量这方面的技术信息,许多学习酿酒的人是在 TheElectricBrewery.com 这个网站起步的,只不过将那些控制版搭建在一起是十分复杂的,尽管最简单的办法在这个网站上总结的很好。当然你也能用一个小成本的方法并且依旧可以得到相同的结果 —— 用一个热水壶和热酒容器通过一个 PID 控制器来加热你的酿酒原料。但是我认为这有点太无聊(这也意味着你不能体验到完整的酿酒过程)。

需要用到的硬件

在我开始我的这个项目之前, 我决定开始买零件,我最基础的设计是一个可以将液体加热到 5500 瓦的热酒容器(HLT)和开水壶,加一个活底的麦芽浆桶,我通过一个 50 英尺的不锈钢线圈在热酒容器里让泵来再循环麦芽浆("热量交换再循环麦芽浆系统, 也叫 HERMS)。同时我需要另一个泵来在热酒容器里循环水,并且把水传输到麦芽浆桶里,整个电子部件全部是用树莓派来控制的。

建立我的电子酿酒系统并且尽可能的自动化意味着我需要以下的组件:

  • 一个 5500 瓦的电子加热酒精容器(HLT)
  • 能够放入加热酒精容器里的 50 英尺(0.5 英寸)的不锈钢线圈(热量交换再循环麦芽浆系统)
  • 一个 5500 瓦的电子加热水壶
  • 多个固态继电器加热开关
  • 2 个高温食品级泵
  • 泵的开关用继电器
  • 可拆除装置和一个硅管
  • 不锈钢球阀
  • 一个测量温度的探针
  • 很多线
  • 一个来容纳这些配件的电路盒子

 title=

酿酒系统 (photo by Christopher Aedo. CC BY-SA 4.0)

建立酿酒系统的电气化方面的细节 The Electric Brewery 这个网站概括的很好,这里我不再重复,当你计划用树莓派代替这个 PID 控制器的话,你可以读以下的建议。

一个重要的事情需要注意,固态继电器(SSR)信号电压,许多教程建议使用一个 12 伏的固态继电器来关闭电路,树莓派的 GPIO 针插口只支持 3 伏输出电压,然而,必须购买继电器将电压变为 3 伏。

 title=

Inkbird SSR (photo by Christopher Aedo. CC BY-SA 4.0)

要运行酿酒系统,你的树莓派必须做两个关键事情:测量来自几个不同位置的温度,用继电器开关来控制加热元件,树莓派很容易来处理这些任务。

这里有一些不同的方法来将温度传感器连到树莓派上,但是我找到了最方便的方法用单总线。这就可以让多个传感器分享相同的线路(实际上是三根线),这三根线可以使酿酒系统的多个设备更方便的工作,如果你要从网上找一个防水的 DS18B20 温度传感器,你可以会找到很多选择。我用的是日立 DS18B20 防水温度传感器

要控制加热元件,树莓派包括了几个用来软件寻址的总线扩展器(GPIO),它会通过在某个文件写入 0 或者 1 让你发送3.3v 的电压到一个继电器,在我第一次了解树莓派是怎样工作的时候,这个用 GPIO 驱动继电器的树莓派教程对我来说是最有帮助的,总线扩展器控制着多个固态继电器,通过酿酒软件来直接控制加热元件的开关。

我首先将所有部件放到这个电路盒子,因为这将成为一个滚动的小车,我要让它便于移动,而不是固定不动的,如果我有一个店(比如说在车库、工具房、或者地下室),我需要要用一个装在墙上的更大的电路盒,而现在我找到一个大小正好的防水工程盒子,能放进每件东西,最后它成为小巧紧凑工具盒,并且能够工作。在左下角是和树莓派连接的为总线扩展器到单总线温度探针和固态继电器的扩展板。

要保持 240v 的固态继电器温度不高,我在盒子上切了个洞,在盒子的外面用 CPU 降温凝胶把铜片散热片安装到盒子外面的热槽之间。它工作的很好,盒子里没有温度上的问题了,在盒子盖上我放了两个开关为 120v 的插座,加两个240v 的 led 来显示加热元件是否通电。我用干燥器的插座和插头,所以可以很容易的断开电热水壶的连接。首次尝试每件事情都工作正常。(第一次绘制电路图必有回报)

这个照片来自“概念”版,最终生产系统应该有两个以上的固态继电器,以便 240v 的电路两个针脚能够切换,另外我将通过软件来切换泵的开关。现在通过盒子前面的物理开关控制它们,但是也很容易用继电器控制它们。

 title=

控制盒子 (photo by Christopher Aedo. CC BY-SA 4.0)

唯一剩下有点棘手的事情是温度探针的压合接头,这个探针安装在加热酒精容器和麦芽浆桶球形的最底部阀门前的 T 字型接头上。当液体流过温度传感器,温度可以准确显示。我考虑加一个套管到热水壶里,但是对于我的酿造工艺没有什么用。最后,我买到了四分之一英寸的压合接头,它们工作完美。

软件

一旦硬件整理好,我就有时间来处理软件了,我在树莓派上跑了最新的 Raspbian 发行版,操作系统方面没有什么特别的。

我开始使用 Strangebrew Elsinore 酿酒软件,当我的朋友问我是否我听说过 Hosehead(一个基于树莓派的酿酒控制器),我找到了 Strangebrew Elsinore 。我认为 Hosehead 很棒,但我并不是要买一个酿酒控制器,而是要挑战自己,搭建一个自己的。

设置 Strangebrew Elsinore 很简单,其文档直白,没有遇到任何的问题。尽管 Strangebrew Elsinore 工作的很好,但在我的一代树莓派上运行 java 有时是费力的,不止崩溃一次。我看到这个软件开发停顿也很伤心,似乎他们也没有更多贡献者的大型社区(尽管有很多人还在用它)。

CraftBeerPi

之后我偶然遇到了一个用 Python 写的 CraftbeerPI,它有活跃的贡献者支持的开发社区。原作者(也是当前维护者) Manuel Fritsch 在贡献和反馈问题处理方面做的很好。克隆这个仓库然后开始只用了我一点时间。其 README 文档也是一个连接 DS1820 温度传感器的好例子,同时也有关于硬件接口到树莓派或者芯片电脑 的注意事项。

在启动的时候,CraftbeerPI 引导用户通过一个设置过程来发现温度探针是否可用,并且让你指定哪个 GPIO 总线扩展器指针来管理树莓派上哪个配件。

 title=

CraftBeerPi (photo by Christopher Aedo. CC BY-SA 4.0)

用这个系统进行自制酿酒是容易的,我能够依靠它掌握可靠的温度,我能输入多个温度段来控制麦芽浆温度,用CraftbeerPi 酿酒的日子有一点点累,但是我很高兴用传统的手工管理丙烷燃烧器的“兴奋”来换取这个系统的有效性和持续性。

CraftBeerPI 的用户友好性鼓舞我设置了另一个控制器来运行“发酵室”。就我来说,那是一个二手冰箱,我用了 50 美元加上放在里面的 25 美元的加热器。CraftBeerPI 很容易控制电器元件的冷热,你也能够设置多个温度阶段。举个例子,这个图表显示我最近做的 IPA 进程的发酵温度。发酵室发酵麦芽汁在 67F° 的温度下需要 4 天,然后每 12 小时上升一度直到温度到达 72F°。剩下两天温度保持不变是为了双乙酰生成。之后 5 天温度降到 65F°,这段时间是让啤酒变“干”,最后啤酒发酵温度直接降到 38F°。CraftBeerPI 可以加入各个阶段,让软件管理发酵更加容易。

 title=

SIPA 发酵设置 (photo by Christopher Aedo. CC BY-SA 4.0)

我也试验过用液体比重计来对酵啤酒的比重进行监测,通过蓝牙连接的浮动传感器可以达到。有一个整合的计划能让 CraftbeerPi 很好工作,现在它记录这些比重数据到谷歌的电子表格里。一旦这个液体比重计能连接到发酵控制器,设置的自动发酵设置会基于酵母的活动性直接运行且更加容易,而不是在 4 天内完成主要发酵,可以在比重稳定 24 小时后设定温度。

像这样的一些项目,构想并计划改进和增加组件是很容易,不过,我很高兴今天经历过的事情。我用这种装置酿造了很多啤酒,每次都能达到预期的麦芽汁比率,而且啤酒一直都很美味。我的最重要的消费者 —— 就是我!很高兴我可以随时饮用。

 title=

随时饮用 (photo by Christopher Aedo. CC BY-SA 4.0)

这篇文章基于 Christopher 的开放的西部的讲话《用Linux、Python 和树莓派酿制啤酒》。

(题图:Quinn Dombrowski. Modified by Opensource.com. CC BY-SA 4.0


作者简介:

Christopher Aedo 从他的学生时代就从事并且贡献于开源软件事业。最近他在 IBM 领导一个极棒的上游开发者团队,同时他也是开发者拥护者。当他不再工作或者实在会议室演讲的时候,他可能在波特兰市俄勒冈州用树莓派酿制和发酵一杯美味的啤酒。


via: https://opensource.com/article/17/7/brewing-beer-python-and-raspberry-pi

作者:Christopher Aedo 译者:hwlife 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Thecorpora 的发布的 “Q.bo One” 机器人基于 RPi 3 和 Arduino,并提供立体相机、麦克风、扬声器,以及视觉和语言识别。

2010 年,作为一个开源概念验证和用于探索 AI 在多传感器、交互式机器人的能力的研究项目,机器人开发商 Francisco Paz 及它在巴塞罗那的 Thecorpora 公司推出了首款 Qbo “Cue-be-oh” 机器人。在今年 2 月移动世界大会上的预览之后,Thecorpora 把它放到了 Indiegogo 上,与 Arrow 合作推出了第一个批量生产的社交机器人版本。

Q.bo One 的左侧

Q.bo One 的顶部

像原来一样,新的 Q.bo One 有一个带眼睛的球形头(双立体相机)、耳朵(3 个麦克风)和嘴(扬声器),并由 WiFi 和蓝牙控制。 Q.bo One 也同样采用开源 Linux 软件和开放规格硬件。然而,它不是使用基于 Intel Atom 的 Mini-ITX 板,而是在与 Arduino 兼容的主板相连的 Raspberry Pi 3 上运行 Raspbian。

Q.bo One 侧视图*

Q.bo One 于 7 月中旬在 Indiegogo 上架,起价为 369 美元(早期买家)或 399 美元,有包括内置的树莓派 3 和基于 Arduino 的 “Qboard” 控制器板。它还有售价 $499 的完整套装。目前,Indiegogo 上的众筹目标是 $100,000,现在大概达成了 15%,并且它 12 月出货。

更专业的机器人工程师和嵌入式开发人员可能会想要使用价值 $99 的只有树莓派和 Qboard PCB 和软件的版本,或者提供没有电路板的机器人套件的 $249 版本。使用此版本,你可以用自己的 Arduino 控制器替换 Qboard,并将树莓派 3 替换为另一个 Linux SBC。该公司列出了 Banana Pi、BeagleBone、Tinker Board 以及即将退市的 Intel Edison,作为兼容替代品的示例。

Q.bo One 套件

与 2010 年的 Qbo 不同,Q.bo One 除了球面头部之外无法移动,它可以在双重伺服系统的帮助下在底座上旋转,以便跟踪声音和动作。Robotis Dynamixel 舵机同样开源,树莓派基于 TurtleBot 3 机器人工具包,除了左右之外,还可以上下移动。

Q.bo One 细节

Qboard 细节

Q.bo One 类似于基于 Linux 的 Jibo “社交机器人”,它于 2014 年在 Indiegogo 众筹,最后达到 360 万美元。然而,Jibo 还没有出货,最近的推迟迫使它在今年的某个时候发布一个版本。

Q.bo One

我们大胆预测 Q.bo One 将会在 2017 年接近 12 月出货。核心技术和 AI 软件已被证明,而树莓派和 Arduino 技术也是如此。Qboard 主板已经由 Arrow 制造和认证。

开源设计表明,即使是移动版本也不会有问题。这使它更像是滚动的人形生物 Pepper,这是一个来自 Softbank 和 Aldeberan 类似的人工智能对话机器人。

Q.bo One 自原始版以来添加了一些技巧,例如由 20 个 LED 组成的“嘴巴”, 它以不同的、可编程的方式在语音中模仿嘴唇开合。如果你想点击机器人获得关注,那么它的头上还有三个触摸传感器。但是,你其实只需要说话就行,而 Q.bo One 会像一个可卡犬一样转身并凝视着你。

接口和你在树莓派 3 上的一样,它在我们的 2017 黑客电路板调查中消灭了其他对手。为树莓派 3 的 WiFi 和蓝牙安装了天线。

Q.bo One 软件架构

Q.bo One 及 Scratch 编程

Qboard(也称为 Q.board)在 Atmel ATSAMD21 MCU 上运行 Arduino 代码,并有三个麦克风、扬声器、触摸传感器、Dynamixel 控制器和用于嘴巴的 LED 矩阵。其他功能包括 GPIO、I2C接口和可连接到台式机的 micro-USB 口。

Q.bo One 可以识别脸部和追踪移动,机器人甚至可以在镜子中识别自己。在云连接的帮助下,机器人可以识别并与其他 Q.bo One 机器人交谈。机器人可以在自然语言处理的帮助下回答问题,并通过文字转语音朗读。

可以使用 Scratch 编程,它是机器人的主要功能,可以教孩子关于机器人和编程。机器人也是为教育者和制造者设计的,可以作为老年人的伴侣。

基于 Raspbian 的软件使用 OpenCV 进行视觉处理,并可以使用各种语言(包括 C++)进行编程。该软件还提供了 IBM Bluemix、NodeRED 和 ROS 的钩子。大概你也可以整合 AlexaGoogle Assistant语音代理,虽然 Thecorpora 没有提及这一点。

更多信息

Q.bo One 在 7 月中旬在 Indiegogo 上架,起价为完整套件 $369 和完整组合 $499 。出货预计在 2017 年 12 月。更多信息请参见 Q.bo One 的 Indiegogo 页面Thecorpora 网站


via: http://linuxgizmos.com/open-source-social-robot-kit-runs-on-raspberry-pi-and-arduino/

作者:Eric Brown 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

树莓派是一种微型的单板电脑(SBC),已经在学校的计算机科学教学中掀起了一场革命,但同样,它也给软件开发者带来了福音。目前,树莓派获得的知名度远远超出了它原本的目标市场,而且正在应用于机器人项目中。

树莓派是一个可以运行 Linux 操作系统的微型开发板计算机,由英国树莓派基金会开发,用来在英国和发展中国家促进学校的基础计算机科学教育。树莓派拥有 USB 接口,能够支持多种即插即用外围设备,比如键盘、鼠标、打印机等。它包含了一个 HDMI(高清多媒体界面)端口,可以为用户提供视频输出。信用卡大小的尺寸使得树莓派非常便携且价格便宜。仅需一个 5V 的 micro-USB 电源供电,类似于给手机用的充电器一样。

多年来,树莓派基金会已经推出了几个不同版本的树莓派产品。 第一个版本是树莓派 1B 型,随后是一个相对简单便宜的 A 型。在 2014 年,基金会推出了一个增强版本 —— 树莓派 1B+。在 2015 年,基金会推出了全新设计的版本,售价为 5 美元,命名为树莓派 Zero。

在 2016 年 2 月,树莓派 3B 型发布,这也是现在可用的主要型号。在 2017 年,基金会发布了树莓派 Zero 的新型号树莓派 Zero W (W = wireless 无线)。

在不久的将来,一个提高了技术规格的型号将会到来,为嵌入式系统发烧友、研究员、爱好者和工程师们用其开发多种功能的实时应用提供一个稳健的平台。

图 1 :树莓派

树莓派是一个高效的编程设备

在给树莓派供电后,启动运行 LXDE 窗口管理器,用户会获得一个完整的基于 Debian 的 Linux 操作系统,即 Raspbian。Raspbian 操作系统为用户提供了众多自由开源的程序,涵盖了程序设计、游戏、应用以及教育方面。

树莓派的官方编程语言是 Python ,并已预装在了 Paspbian 操作系统上。结合树莓派和 Python 的集成开发环境 IDLE3 ,可以让程序员能够开发各种基于 Python 的程序。

除了 Python ,树莓派还支持多种其它语言。并且可以使用一些自由开源的 IDE (集成开发环境)。允许程序员、开发者和应用工程师在树莓派上开发程序和应用。

树莓派上的最佳 IDE

作为一名程序员和开发者,你需要的首先就是有一个 IDE ,这是一个集成了开发者和程序员编写、编译和测试软件所需的的基本工具的综合软件套件。IDE 包含了代码编辑器、编译或解释程序和调试器,并允许开发者通过一个图形用户界面(GUI)来访问。IDE 的主要目的之一是提供一个整合单元来统一功能设置,减少组合多个开发工具的必要配置。

IDE 的用户界面与文字处理程序相似,在工具栏提供颜色编码、源代码格式化、错误诊断、报告以及智能代码补全工具。IDE 被设计用来整合第三方版本控制库如 GitHub 或 Apache Subversion 。一些 IDE 专注于特定的编程语言,支持一个匹配该编程语言的功能集,当然也有一些是支持多种语言的。

树莓派上拥有丰富的 IDE ,为程序员提供友好界面来开发源代码、应用程序以及系统程序。

就让我们来探索最适合树莓派的 IDE 吧。

BlueJ

图 2 :BlueJ 的 GUI 界面

BlueJ 是一款致力于 Java 编程语言的 IDE ,主要是为教育目的而开发的。它也支持小型的软件开发项目。BlueJ 由澳大利亚的莫纳什大学的 Michael Kolling 和 John Rosenburg 在 2000 年作为 Blue 系统的继任者而开发的,后来在 2009 年 3 月成为自由开源软件。

BlueJ 提供一种学习面向对象的编程概念的高效的方式,图形用户界面为应用程序提供像 UML 图一样的类结构。每一个像类、对象和函数调用这样基于 OOPS 的概念,都可以通过基于交互的设计来表示。

特性:

  • 简单的交互界面: 与 NetBeans 或 Eclipse 这样的专业界面相比,BlueJ 的用户界面更加简易学。使开发者可以专注于编程而不是环境。
  • 便携: BlueJ 支持多种平台如 Windows、Linux 以及 Mac OS X , 可以免安装直接运行。
  • 新的创新: BlueJ IDE 在对象工作台、代码块和范围着色方面有着大量的创新,使新手体验到开发的乐趣。
  • 强大的技术支持: BlueJ 拥有一个核心功能团队来解答疑问,并且在 24 小时内为开发者的各种问题提供解决方案。

最新版本: 4.0.1

Geany IDE

图 3 : Geany IDE 的 GUI 界面

Geany IDE 使用了 Scintilla 和 GTK+ 的集成开发环境支持,被认为是一个非常轻量级的基于 GUI 的文本编辑器。 Geany 的独特之处在于它被设计为独立于特定的桌面环境,并且仅需要较少数量的依赖包。只需要 GTK2 运行库就可以运行。Geany IDE 支持多种编程语言如 C、C++、C#、Java、HTML、PHP、Python、Perl、Ruby、Erlang 和 LaTeX 。

特性:

  • 代码自动补全和简单的代码导航。
  • 高效的语法高亮和代码折叠。
  • 支持嵌入式终端仿真器,拥有高度可扩展性,可以免费下载大量功能丰富的插件。
  • 简单的项目管理并支持多种文件类型,包括 C、Java、PHP、HTML、Python、Perl 等。
  • 高度定制的界面,可以添加或删除设置、栏及窗口。

最新版本: 1.30.1

Adafruit WebIDE

图 4 :Adafruit WebIDE 的 GUI 界面

Adafruit WebIDE 为树莓派用户提供一个基于 Web 的界面来执行编程功能,并且允许开发者编译多种语言的源代码如 Python、Ruby、JavaScript 等。

Adafruit IDE 允许开发者把代码放在 GIT 仓库,这样就可以通过 GitHub 在任何地方进行访问。

特性:

  • 可以通过 Web 浏览器的 8080 端口或 80 端口进行访问。
  • 支持源代码的简单编译和运行。
  • 配备一个调试器和可视器来进行正确追踪,代码导航以及测试源代码。

AlgoIDE

图 5 :AlgoIDE 的 GUI 界面

AlgoIDE 结合了一个脚本语言和一个 IDE 环境,它被设计用来将编程与下一步的示例一起来运行。AlgoIDE 包含了一个强大的调试器、 实时范围管理器并且一步一步的执行代码。针对全年龄人群而设计,用来设计程序以及对算法进行大量的研究。

AlgoIDE 支持多种类型的语言如 C、C++、Python、Java、Smalltalk、Objective C、ActionScript 等。

特性:

  • 代码自动缩进和补全。
  • 高效的语法高亮和错误管理。
  • 包含了一个调试器、范围管理器和动态帮助系统。
  • 支持 GUI 和传统的 Logo 程序语言 Turtle 来进行源代码开发。

最新版本: 2016-12-08 (上次更新时间)

Ninja IDE

图 6 :Ninja IDE 的 GUI 界面

Ninja IDE (“Ninja-IDE Is Not Just Another IDE”的缩写),由 Diego Sarmentero 、Horacio Duranm Gabriel Acosta 、Pedro Mourelle 和 Jose Rostango 设计,使用纯 Python 编写并且支持多种平台运行如 Linux 、Mac OS X 和 Windows 。Ninja IDE 被认为是一个跨平台的 IDE 软件,尤其是用来设计基于 Python 的应用程序。

Ninja IDE 是非常轻量级的,并能执行多种功能如文件处理、代码定位、跳转行、标签、代码自动缩进和编辑器缩放。除了 Python ,这款 IDE 也支持几种其他语言。

特性:

  • 高效的代码编辑器: Ninja-IDE 被认为是最有效的代码编辑器,因为它能执行多种功能如代码补全和缩进,以及助手功能。
  • 错误和 PEP8 查找器: 高亮显示文件中的静态和 PEP8 错误。
  • 代码定位器: 使用此功能,快速直接访问能够访问的文件。用户可以使用快捷键 “CTRL+K” 进行输入,IDE 会找到特定的文本。
  • 独特的项目管理功能以及大量的插件使得具有 Ninja-IDE 高度可扩展性。

最新版本: 2.3

Lazarus IDE

图 7 :Lazarus IDE 的 GUI 界面

Lazarus IDE 是由 Cliff Baeseman、Shane Miller 和 Michael A. Hess 于 1999 年 2 月 开发。它被视为是一款用于应用程序快速开发的基于 GUI 的跨平台 IDE ,使用的是 Free Pascal 编译器。Lazarus IDE 继承了 Free Pascal 的三个主要特性 —— 编译速度、执行速度和交叉编译。可以在多种操作系统上对应用程序进行交叉编译,如 Windows 、Linux 、Mac OS X 等。

这款 IDE 由 Lazarus 组件库组成。这些组件库以一个单一和带有不同的特定平台实现的统一接口的形式为开发者提供了多种配套设施。它支持“一次编写,随处编译”的原则。

特性:

  • 强大而快速的处理各种类型的源代码,同时支持性能测试。
  • 易用的 GUI ,支持组件拖拽功能。可以通过 Lazarus 包文件为 IDE 添加附加组件。
  • 使用新功能加强的 Free Pascal ,可以用来开发 Android 应用。
  • 高可扩展性、开放源代码并支持多种框架来编译其他语言。

最新版本: 1.6.4

Codeblock IDE

图 8 : Codeblock IDE 界面

Codeblock IDE 是用 C++ 编写的,使用了 wxWidgets 作为 GUI 库,发布于 2005 年。它是一款自由开源、跨平台的 IDE ,支持多种类型的编译器如 GCC 、Clang 和 Visual C++ 。

Codeblock IDE 高度智能并且可以支持多种功能,如语法高亮、代码折叠、代码补全和缩进,同时也拥有一些扩展插件来进行定制。它可以在 Windows 、Mac OS X 和 Linux 操作系统上运行。

特性:

  • 支持多种类型的编译器如 GCC 、Visual C++ 、Borland C++ 、Watcom 、Intel C++ 等。主要针对 C++ 而设计,不过现在也支持其他的一些语言。
  • 智能的调试器,允许用户通过访问本地函数符号和参数显示,用户自定义监视、调用堆栈、自定义内存转储、线程切换以及 GNU 调试接口调试程序。
  • 支持多种功能用来从 Dev-C++ 、Visual C++ 等平台迁移代码。
  • 使用自定义系统和 XML 扩展文件来存储信息。

最新版本: 16.01

Greenfoot IDE

图 9 : Greenfoot IDE 界面

Greenfoot IDE 是由肯特大学的 Michael Kolling 设计。它是一款基于 Java 的跨平台 IDE ,针对中学和大学教育目的而设计。Greenfoot IDE 的功能有项目管理、代码自动补全、语法高亮并提供一个简易的 GUI 界面。

Greenfoot IDE 编程包括两个主类的子类 —— World 和 Actor 。 World 表示主要执行发生的类,Actors 是已经存在且活动于 World 中的对象。

特性:

  • 简单易用的 GUI ,比 BlueJ 和其他的 IDE 交互性更强。
  • 易于新手和初学者上手。
  • 在执行 Java 代码方面非常强大。
  • 支持 GNOME/KDE/X11 图形环境。
  • 其他功能包括项目管理、自动补全、语法高亮以及错误自动校正。

最新版本: 3.1.0


作者简介:

Anand Nayyar

作者是位于印度旁遮普邦的贾朗达尔学院计算机应用与 IT 系的教授助理。他热爱开源技术、嵌入式系统、云计算、无线传感器网络以及模拟器。可以在 anand\[email protected] 联系他。


via: http://opensourceforu.com/2017/06/top-ides-raspberry-pi/

作者:Anand Nayyar 译者:softpaopao 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

树莓派,随心所欲。

 title=

我最近在 SVPerl (硅谷 Perl 聚会)谈到在树莓派上运行 Perl 语言的时候,有人问我,“我听说树莓派应该使用 Python ,是这样吗?”。我非常乐意回答他,这是个常见误解。树莓派可以支持任何语言: Python、Perl 和其他树莓派官方软件 Raspbian Linux 初始安装的语言。

看似很厉害,其实很简单。树莓派的创造者英国的计算机科学教授 Eben Upton 曾经说过,树莓派名字中的‘派’(pi),是想为了听起来像 Python,因为他喜欢这门语言。他选择了这门语言作为孩子们的启蒙语言。但是他和他的团队做了一个通用计算机。开源软件没给树莓派任何限制。我们想运行什么就运行什么,全凭自己心意。

我在 SVPerl 和这篇文章中还想讲第二点,就是介绍我的 “PiFlash” 脚本。虽然它是用 Perl 写的,但是不需要你有多了解 Perl 就可以在 Linux 下将树莓派系统自动化烧录到 SD 卡。这样对初学者就比较友好,避免他们在烧录 SD 卡时候,偶然擦除了整个硬盘。即使是高级用户也可以从它的自动化工作中受益,包括我,这也是我开发这个工具的原因。在 Windows 和 Mac 下也有类似的工具,但是树莓派网站没有介绍类似工具给 Linux 用户。不过,现在有了。

开源软件早就有自己造轮子的传统,因为他们总是崇尚“自痒自挠”去解决问题。这种方式在 Eric S 1997 年的论文和 1999 年的书籍《大教堂与集市》中早有提及,它定义了开源软件的方法论。我也是为了满足想我这样的 Linux 用户,所以写了这个脚本。

下载系统镜像

想要开启树莓派之旅,你首先需要为它下载一个操作系统。我们称之为“系统镜像”文件。一旦你把它下载到你的桌面、手提电脑,或者甚至是另一个树莓派中,我就需要写入或者称之为“烧录”进你的 SD卡。详细情况可以看在线文件。手动做这件事情需要一些功底,你要把系统镜像烧录到整个 SD卡,而不是其中一块分区。系统镜像必须独自包含至少一个分区,因为树莓派引导需要一个 FAT32文件系统分区,系统引导这里开始。除了引导分区,其他分区可以是操作系统内核支持的任何分区类型。

在大部分树莓派中,我们都运行的是某些使用 Linux 内核的发行版。已经有一系列树莓派中常用的系统镜像你可以下载使用。(当然,没什么能阻止你自己造轮子)

树莓派基金会向新手推荐的是“NOOBS”系统。它代表了 “New Out of the Box System”(新鲜出炉即开即用系统),显然它好像听起来像术语 “noob"”(小白),通俗点说就是 “newbie”(菜鸟)。NOOBS 是一个基于树莓派的 Linux 系统,它会给你一个菜单可以在你的树莓派上自动下载安装几个其它的系统镜像。

Raspbian Linux 是 Debian Linux 发行版的树莓派定制版。它是为树莓派开发的正式 Linux 发行版,并且由树莓派基金会维护。几乎所有树莓派驱动和软件都会在 Raspbian 上先试用,然后才会放到其它发行版上。其默认安装博客 Perl。

Ubuntu Linux (还有其社区版的 Ubuntu MATE)也将树莓派作为其支持 ARM (Advanced RISC Machines)处理器的平台之一。RISC(Reduced Instruction Set Computer)Ubuntu 是一个 Debian Linux 的商业化支持的开源分支,它也使用 DEB 包管理器。Perl 也在其中。它仅仅支持 32 位 ARM7 或者 64 位 ARM8 处理器的树莓派 2 和 3。ARM6 的树莓派 1 和 Zero 从未被 Ubuntu 构建过程支持。

Fedora Linux 支持树莓派2 ,而 Fedora 25 支持 3。 Fedora 是一个隶属于红帽(Red Hat)的开源项目。Fedora 是个基础,商业版的 RHEL(Red Hat Enterprise Linux)在其上增加了商业软件包和支持,所以其软件像所有的兼容红帽的发行版一样来自 RPM(Red Hat Package Manager) 软件包。就像其它发行版一样,也包括 Perl。

RISC OS 是一个特别针对 ARM 处理器的单用户操作系统。如果你想要一个比 Linux 系统更加简洁的小型桌面(功能更少),你可以考虑一下。它同样支持 Perl。

RaspBSD 是一个 FreeBSD 的树莓派发行版。它是一个基于 Unix 的系统,而不是 Linux。作为开源 Unix 的一员,它延续了 Unix 的功能,而且和 Linux 有着众多相似之处。包括有类似的开源软件带来的相似的系统环境,包括 Perl。

OSMC,即开源多媒体中心,以及 LibreElec 电视娱乐中心,它们都基于运行 Linux 内核之上的 Kodi 娱乐中心。它是一个小巧、特化的 Linux 系统,所以不要期望它能支持 Perl。

Microsoft Windows IoT Core 是仅运行在树莓派3上的新成员。你需要微软开发者身份才能下载。而作为一个 Linux 极客,我根本不看它。我的 PiFlash 脚本还不支持它,但如果你找的是它,你可以去看看。

PiFlash 脚本

如果你想看看树莓派 SD 卡烧录指导,你可以找到在 Windows 或者 Mac 系统下需要下载的工具来完成烧录任务。但是对于 Linux 系统,只有一系列手工操作建议。我已经手工做过这个太多次,这很容易引发一个开发者的本能去自动化这个过程,这就是 PiFlash 脚本的起源。这有点难,因为 Linux 有太多方法可以配置,但是它们都是基于 Linux 内核的。

我总是觉得,手工操作潜在最大的失误恐怕就是偶然错误地擦除了某个设备,而不是擦除了 SD 卡,然后彻底清除了我本想保留在硬盘的东西。我在 SVPerl 演讲中也说了,我很惊讶地发现在听众中有犯了这种错误(而且不害怕承认)的人。因此,PiFlash 其中一个目的就是保护新手的安全,不会擦除 SD 卡之外的设备。PiFlash 脚本还会拒绝覆写包含了已经挂载的文件系统的设备。

对于有经验的用户,包括我,PiFlash 脚本还提供提供一个简便的自动化服务。下载完系统镜像之后,我不需要必须从 zip格式中解压缩或者提取出系统镜像。PiFlash 可以直接提取它,不管是哪种格式,并且直接烧录到 SD 卡中。

我把 PiFlash 及其指导发布在了 GitHub 上。

命令行用法如下:

piflash [--verbose] input-file output-device
piflash [--verbose] --SDsearch

input-file 参数是你要写入的系统镜像文件,只要是你从树莓派发行版网站下载的镜像都行。output-device 参数是你要写入的 SD 卡的块设备路径。

你也可以使用 --SDsearch 参数列出挂载在系统中 SD 卡设备名称。

可选项 --verbose 可以输出所有的程序状态数据,它在你需要帮助时或者递送 bug 报告和自行排错时很有用。它就是我开发时用的。

下面的例子是我使用该脚本写入仍是 zip 存档的 Raspbian 镜像到位于 /dev/mmcblk0 的 SD 卡:

piflash 2016-11-25-raspbian-jessie.img.zip /dev/mmcblk0

如果你已经指定了 /dev/mmcblk0p1 (SD 卡的第一分区),它会识别到这个分区不是一个正确的位置,并拒绝写入。

在不同的 Linux 系统中怎样去识别哪个设备是 SD 卡是一个技术活。像 mmcblk0 这种在我的笔记本上是基于 PCI 的 SD卡接口。如果我使用了 USB SD 卡接口,它就是 /dev/sdb,这在多硬盘的系统中不好区分。然而,只有少量的 Linux 块设备支持 SD 卡。PiFlash 在这两种情况下都会检查块设备的参数。如果全部失败,它会认为可写入、可移动的,并有着正确物理扇区数量的 USB 驱动器是 SD 卡。

我想这应该能涵盖大部分情况。但是,如果你使用了我不知道的 SD 卡接口呢?我乐意看到你的来信。请在输出信息中加上 --verbos --SDsearch 参数,以便让我可以知道你系统目前的环境。理想情况下,如果 PiFlash 脚本可以被广泛利用,我们可以构建一个开源社区去尽可能的帮助更多的树莓派用户。

树莓派的 CPAN 模块

CPAN(Comprehensive Perl Archive Network)是一个世界范围内包含各种 Perl 模块的的下载镜像。它们都是开源的。大量 CPAN 中的模块都是历久弥坚。对于成千上百的任务,你不需要重复造轮子,只要利用别人已经发布的代码就可以了。然后,你还可以提交你的新功能。

尽管树莓派是个五脏俱全的 Linux 系统,支持大部分 CPAN 模块,但是这里我想强调一下专为树莓派硬件开发的东西。一般来说它们都用在测量、控制、机器人方面的嵌入式系统中。你可以通过 GPIO (General-Purpose Input/Output)针脚将你的树莓派连接到外部电子设备。

可以使用树莓派 GPIO 针脚的模块如下:Device::SMBusDevice::I2CRpi::PIGPIORpi::SPIRpi::WiringPiDevice::WebIO::RaspberryPIDevice::PiGlow。树莓派支持的嵌入式模块如下:UAV::Pilot::Wumpus::Server::Backend::RaspberryPiI2CRPI::DHT11(温度/湿度)、RPI::HCSR04(超声波)、App::RPI::EnvUIRPi::DigiPot::MCP4XXXXRPI::ADC::ADSDevice::PaPiRusDevice::BCM2835::Timer

例子

这里有些我们在树莓派上可以用 Perl 做的事情的例子。

例一:在 OSMC 使用 PiFlash 播放视频

本例中,你将练习如何设置并运行使用 OSMC 操作系统的树莓派。

  • RaspberryPi.Org 下载区,下载最新的 OSMC 版本。
  • 将空 SD 卡插入你的 Linux 电脑或者笔记本。树莓派第一代是全尺寸的 SD 卡,除此以外都在使用 microSD,你也许需要一个通用适配器才能插入它。
  • 在插入前后分别运行 cat /proc/partitions 命令来看看系统分给硬件的设备名称。它可能像这样 /dev/mmcblk0 或者 /dev/sdb, 用如下命令将正确的系统镜像烧录到 SD 卡:piflash OSMC_TGT_rbp2_20170210.img.gz /dev/mmcblk0
  • 弹出 SD 卡,将它插入树莓派中,接上 HDMI 显示器,开机。
  • 当 OSMC 设置完毕,插入一个 USB 设备,在里面放点视频。出于示范目的,我将使用 youtube-dl 程序下载两个视频。运行 youtube-dl OHF2xDrq8dY (彭博关于英国高新产业,包括树莓派的介绍)还有 youtube-dl nAvZMgXbE9c (CNet 发表的“排名前五的树莓派项目”) 。将它们下载到 USB 中,然后卸载移除设备。
  • 将 USB 设备插入到 OSMC 树莓派。点击视频选项进入到外部设备。
  • 只要你能在树莓派中播放视频,那么恭喜你,你已经完成了本次练习。玩的愉快。

例二:随机播放目录中的视频的脚本

这个例子将使用一个脚本在树莓派上的目录中乱序播放视频。根据视频的不同和设备的摆放位置,这可以用作信息亭显示的用途。我写这个脚本用来展示室内体验视频。

  • 设置树莓派引导 Raspbian Linux。连接到 HDMI 监视器。
  • 从 GitHub 上下载 do-video 脚本。把它放到树莓派中。
  • 跟随该页面的安装指导。最主要的事情就是安装 omxplayer 包,它可以使用树莓派硬件视频加速功能平滑地播放视频。
  • 在家目录的 Videos 目录下放一些视频。
  • 运行 do-video ,这样,应该就可以播放视频了

例三:读取 GPS 数据的脚本

这个例子更加深入,更有针对性。它展示了 Perl 怎么从外部设备中读取数据。在先前例子中出现的我的 GitHub上 “Perl on Pi” 有一个 gps-read.pl 脚本。它可以通过一系列端口从 GPS 读取 NMEA(国家海洋电子协会)的数据。页面还有教程,包括构建它所使用的 AdaFruit Industries 部分,但是你可以使用任何能输出 NMEA 数据的 GPS。

通过这些任务,我想你应该可以在树莓派上像使用其他语言一样使用 Perl了。希望你喜欢。


作者简介:

Ian Kluft - 上学开始,Ian 就对喜欢编程和飞行。他一直致力于 Unix 的工作。在 Linux 内核发布后的六个月他转向了 Linux。他有计算机科学硕士学位,并且拥有 CSSLP 资格证(认证规范开发流程专家),另一方面,他还是引航员和认证的飞机指令长。作为一个超过二十五年的认证的无线电爱好者,在近些年,他在一些电子设备上陆续做了实验,包括树莓派。


via: https://opensource.com/article/17/3/perl-raspberry-pi

作者:Ian Kluft 译者:Taylor1024 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出