raspberry pi
Raspberry Pi体积小,功耗低,因此受到电子爱好者和教育工作者的欢迎。 因此,它与“制造商”场景相关联,有时Arduino (和Arduino风格的嵌入式微控制器)与Pi之间的界限变得模糊。
事实是,Raspberry Pi和Arduino是非常不同的设备,即使它们经常在同一工作台上同时出现。 Arduino在某些项目中很有意义,但对于其他项目,Pi实际上可能是更好的选择(例如,如果您触发复杂的多媒体事件)。 但是,如果您期望Pi可以替代Arduino,那么您会感到有些意外。 我在不同的Craft.io项目中都使用了Arduino和Pi,有时是因为一个显然是另一个的正确选择,而有时是因为我手上只有一个而不是另一个。 如果您已经习惯了Arduino(或者您已经读了很多,并且不清楚它和Pi的不同之处),那么这里是我在获得Pi时发现的额外步骤与微型PC相比,其作用更像嵌入式微控制器。
通用输入输出
人们了解Arduino的第一件事是,除非您有足够的知识来连接它,否则它就不会有用。 您需要输入传感器和输出设备,或者您正在对微控制器进行编程而无任何控制。 Pi是与之相反的极性。 它所做的大部分工作可能完全基于软件,因此连接舷外电子设备的趋势不太常见。 但这不是必须的。
Raspberry Pi具有许多GPIO引脚(具体数量取决于型号),可以检测输入或发送输出信号。 与Arduino不同,所有这些引脚都是数字 IO,这意味着它们知道两种状态:开和关。 大多数Arduino开发板还具有模拟引脚,可以检测状态的程度 ,其实际应用是能够连接温度传感器,光传感器或电位计等用于任意输入的功能。
只要您可以使用二进制输入和输出,Pi的GPIO引脚就非常有用。 但是,与Arduino不同的是,不能通过软件访问这些引脚。 要与GPIO引脚通信,必须安装GPIO库。 提供了两个开发库:
RPi.GPIO Python
RPi.GPIO是一个Python库,可为您提供从GPIO引脚读取和输出的功能。 就Arduino用户的期望而言,这是一个相当高级的接口,因此没有SPI或串行功能。 但是对于简单的项目,它工作得很好。 您可以打开和关闭LED,启动电动机等等。
接线图
WiringPi是用C语言编写的GPIO访问库。使用Arduino系统的任何人都会熟悉它的语法和一般设计,并且它是一个低级库,它甚至包含允许您使用外部板卡的模块(例如Arduino)或类似设备)作为模拟输入。
原始WiringPi项目的贡献者为Python,Ruby,Perl,Java等编写了包装器。
实时表现
与Arduino不同,使用GPIO库不能提供实时性能。 Python库具有Python的开销,它需要定期在后台执行内存管理任务,甚至WiringPi都受Linux内核的调度决定的约束。 实际上,除非您要构建非常依赖实时性能的设备,否则这实际上对您而言并不重要。 在准备一个基于Pi的多媒体项目时,我做了一些测试,试图使用安全性限制来提高性能,但是它们都失败了(我从来没有去重新编译内核,因此没有帮助)。 最终,我发现该项目(一个音乐界面要接受不可预测的输入,并且确实需要某种即时响应感),绝对不会错过任何节奏,但您的里程可能会因项目而异。
开机启动
由于Arduino是嵌入式系统,因此您一直将刷新到其芯片上的程序运行。 您打开Arduino的电源,程序开始运行,不断循环,直到关闭电源。 Pi不会那样做。 在为Pi供电时,它将加载操作系统,然后耐心地等待您登录或执行某些操作。
如果您需要嵌入式行为,则实际上需要告诉Pi在启动时自动启动应用程序。 更好的是,您可以删除不需要的进程,以便加快启动时间。 你不必做这种方式(你可以只设置你的皮的桌面自动登录,然后设置启动应用程序),但如果你处理郫县作为伪嵌入式设备和不需要一个桌面,为什么要使用资源来运行一个? 为什么引入作为变量,明知来讲演示-ING冷静新的机器人(或任何你正在建设),任何事情如果有问题, 总会出错?
为了使Pi表现得像嵌入式OS,首先要剥离不需要的服务。 这些服务是什么取决于您的项目。 如果您的项目不需要网络,请禁用网络服务。 如果您的项目不需要图形界面,请从系统中丢失X11软件包。 查看启动时正在运行的服务,并尽可能地禁用它们。
您还希望Pi自动登录。 如何执行此操作取决于您正在运行的Pi发行版。
没有系统
Pi的大多数现代发行版都将Systemd用于初始化过程(启动过程),但有些却没有。 要在不使用Systemd的系统上激活自动登录,请编辑(具有sudo权限) / etc / inittab文件并更改此行:
1 : 2345 :respawn: / sbin / getty 38400 tty1
对此:
1 : 2345 :respawn: / sbin / getty --autologin your-username-here 38400 tty1
在此处将您的用户名替换为您要自动登录的用户的用户名。 您的Pi可能是pi的默认用户,但您可能已经创建了一个新用户。 如果不确定,请使用whoami查找您的用户名。
进行更改后,请重新启动以确保它可以工作。 Pi应该启动到外壳程序提示符(而不是登录提示符)。
要在成功启动后立即运行您的应用程序,请将您的应用程序作为命令添加到文件/etc/rc.local的最后一行上方(应显示为exit 0 )。 例如,这是我的示例项目的最后两行:
$
sudo
tail
-n
/ etc
/ rc.local
/ usr
/ local
/ bin
/ robotnix
/ robotnix.py
exit
0
确保rc.local是可执行的,并且要启动的应用程序是可执行的:
$
sudo
chmod a+x
/ etc
/ rc.local
$
sudo
chmod a+x
/ usr
/ local
/ bin
/ robotnix
/ robotnix.py
成功重新登录后,再次重新启动以测试您的应用程序是否启动。
在CentOS,Pidora和其他系统上运行
在使用Systemd的发行版(例如CentOS)上,该过程类似,但是发生在一组不同的配置文件中。
对于自动登录过程,编辑文件> /usr/lib/systemd/system/getty@.service并注释掉以下行:
ExecStart =- / sbin / agetty --noclear % I 38400
并用以下变体替换它:
## old line ## ExecStart=-/sbin/agetty --noclear %I 38400
## new command
ExecStart =
/ sbin
/ agetty
--autologin your-username-here
--noclear
% I
38400
这个Systemd文件产生了该过程,这与使用inittab的传统UNIX方法不同。
重新启动您的Pi以测试自动登录。
假设自动登录按预期工作(Pi应该启动到外壳提示符,而不是登录提示符),下一步是为您的应用程序创建自动启动规则。 整个Internet都建议在rc.local中放置命令应该可以工作(因为从理论上讲,Systemd会执行rc.local的向后兼容性执行),但是我在这方面取得了一些成功。 自定义Systemd规则除成功外别无其他。
要编写Systemd规则,请创建一个具有sudo特权的文件,名为/etc/systemd/system/robotnix.service (您可以随意命名;我使用robotnix,因为这是我生成的示例项目的名称对于本文)。
文件内容:
[ Unit
]
Description =Robot Script Startup
[ Service
]
Type =idle
ExecStart =
/ usr
/ local
/ bin
/ robotnix
/ robotnix.py
[ Install
]
WantedBy =multi-user.target
现在启用该服务以在启动时发生:
$ sudo systemctl enable robotnix.service
再次重新启动Pi,以确保您的应用程序正在自动启动。
Pi还是Arduino?
它们都小巧,功能强大,并且都用于电子爱好项目,但是Raspberry Pi不是Arduino。 但是,Pi可以在紧要关头发挥出色的作用。 也就是说,如果您还没有并且对此感到好奇,请不要害怕尝试使用Arduino。 它们都是您工具包中的绝佳工具。 使用本文中的技巧,您可以将Pi用作将来Arduino项目的测试平台,也可以在一台设备上同时兼顾两者。
无论您在下一个硬件项目中最终使用什么,请保持打开状态并保持乐趣。
翻译自: https://opensource.com/life/16/3/how-configure-raspberry-pi-microcontroller
raspberry pi