大星星学物联网概览篇-开发板

版权声明:本文为博主原创文章,未经博主允许不得转载。网易内推职位:www.zhupite.com https://blog.csdn.net/asmcvc/article/details/79558736

7 开发板
选择板子的时候考虑:处理器速度、RAM、连网、USB、功耗、与传感器和其他电路的接口、物理尺寸和外形(芯片尺寸和装配的复杂性)。
如果项目不涉及非常复杂的处理工作,例如只是需要有联网能力和很基本的感测能力,则某些类型的微控制器就能满足需要。如果装置将要处理很多数据,例如对视频进行实时处理,那么你就需要考虑选一个SOC平台了。
对于大多的RAM空间比较适合这个问题,很难给出一个确切的选择标准,因为不同的项目有不同的标准。但不管怎样,不大可能选用那些RAM少于1KB的微控制器。如果想运行标准的加密协议,至少需要4KB或者更多的RAM。对于SOC板,特别是当你打算在上面运行Linux操作系统时,建议至少要有256MB的RAM。
7.1 SMT32
仅了解,先不从此入手,物联网着重在把数据传到服务端并通过服务端与APP交互(或直接与APP交互),这个在网络传输这块比较蹩脚,所以暂不从这个入手。参考《零死角玩转STM32》
7.2 51单片机
仅了解,先不从此入手,物联网着重在把数据传到服务端并通过服务端与APP交互(或直接与APP交互),这个在网络传输这块比较蹩脚,所以暂不从这个入手。
7.3 Arduino
基于 Arduino 和 IoT 云平台搭建物联网系统-极客 http://geek.csdn.net/news/detail/200472
[Arduino]没带钥匙?手机遥控开宿舍之门 - 简书 https://www.jianshu.com/p/f436e696f3bd
参考书籍《Arduino.For.Dummies》
Arduino用esp8266WiFi模块连接到服务器http://blog.csdn.net/HES_C/article/details/73395372

Arduino项目的硬件完全开源,是开源硬件的成功范例。从Arduino NG、 Diecimila、 Duemilanove,再到现在的Uno,“标准”的 Arduino板已经经历了若干次版本更替。

最常见、用来做入门学习的有两种,UNO和MEGA。
Arduino - 我偏爱的三块板子( Uno、Nano、Promini)针脚示意图 - CSDN博客 http://blog.csdn.net/sdlgq/article/details/50320797

这两个开发板的功能几乎一样,MEGA使用的主控制芯片性能要高一些,针脚多一些,可以同时连接的外接硬件就要多一些。相比之下,UNO配置低一些,价格也便宜一些。 MEFGA配置高一些,价格比UNO贵二十块人民币左右(意大利原版之间相比贵二十美元左右)。

Uno板的特色是使用了ATmega328微控制器,并且有一个用于连接计算机的USB接口。 Uno板有32KB的存储空间和2KB的RAM不要因为觉得内存太小而感到失望,尽管有内存方面的限制,你还是能用它做很多事的。

Uno板提供了14个 GPIO引脚(其中有6个引脚能提供PWM输出)和6个10位精度的ADC引脚。可以直接通过IO引脚或者通过使用附加的芯片和USB连接器与ATmega进行串口通信。
如果你需要更多的内存空间或更多的输人输出引脚,可以考虑选用Arduino Mega2560。 ArduinoMega2560软件环境没有变化,但硬件方面有很大的增强:使用了功能更强大的ATmega微控制器;提供了256KB的Fash存储空间和8KB的RAM;新增加了三个串口; GPIO引脚的数量多达54个,其中14个引脚能支持 PWM;有16个 ADC另外一个选择是使用最新的 Arduino Dueo这块单板搭载了32位 ARM内核的微控制器,是 Arduino家族中第一块采用 ARM架构的单板。它的硬件规格和Mega板相近,但把RAM增加到了96KB。

集成开发环境
你通常会采用 Arduino团队在 http://arduino.cc上提供的集成开发环境(IDE)做 Arduino开发。虽然这是一个基于 Processing语言开发环境的功能完善的 IDE,但使用起来非常简单。大多数Arduino项目只需要一个代码文件,所以你可以把这个IDE看作是一个简单的文件编辑器。在这个 IDE中,用来检查代码(通过编译代码实现)或下载代码到单板的控件是你用的最多的功能。

推送代码
用 USB线连接单板相对比较简单。有时,你可能会碰到一些驱动方面的问题(特别是在某些版本的 Windows上),或者遇到 USB端口的访问权限问题(一些 Linux驱动程序包不会把你加人到 dialout组),但这类问题一般都能快速地一次性彻底解决。在这之后,你需要选择正确的串口编号和单板类型。你可以通过查看系统日志或者采用试错法找到正确的串口。你需要仔细查看单板上的标签和 CPU上的文字,然后从 IDE的菜单项中选择正确的单板类型。如果上述设置都正确,推送代码的过程大体上是比较简单的:首先是对代码进行检查和编译,任何的编译错误都会报告给你。如果代码编译成功,它就会被传送到 Ardmno板上并被保存到闪存中。此时, Arduino会重新启动,开始运行新的代码。

操作系统
在默认情况下, Arduino本身并不支持在其上运行操作系统。只是用引导程序(bootloader)来简化之前介绍的代码推送过程。单板上电后,就开始运行你编译过的代码,直到单板断电(或代码崩溃)为止。

不过,在 Arduino上运行操作系统也是可以做到的。通常可以加载一个轻量级实时操作系统( RTOS),例如 FreeRTOS/DuinOS0这些操作系统的主要优势在于其内建的多任务处理支持。但对于很多应用场合而言,使用简单的任务分派库就能获得还算不错的结果。

如果你喜欢稍微复杂一些,可以不使用 IDE,而是用适用于 AVR芯片的 avr-gcc工具集编译代码。在基于 ARM的 Due板出现之前, avr-gcc工具集对于所有的 Arduino板都是适用的。avr-gcc工具集(www.nongnu.org/avr-libc/)汇集了各种程序。它可以用来编译代码,使之能够运行在被大多数 Arduino板所采用的 AVR芯片上;也可以用来把编译后的可执行代码烧写到 AVR芯片上。除了被 Arduino的 IDE在后台调用外,该工具集也可以被直接使用。

编程语言
通常, Arduino采用的编程语言,是源自于 Wiring平台的一个略有修改的C++语言的变种。它包括了若干个库,用来从 Arduino板上的1/0引脚读写数据,并能做一些基本的中断处理(以非常底层的方式来实现多任务处理)。这个C++的变种对代码的顺序不做严格要求,例如,允许对某个函数的调用出现在其定义之前。虽然这只是一个细节上的改变,但考虑到代码往往会被全部存放在一个文件中,这种改变使得我们能够以易于阅读和维护的方式安排代码的顺序。

用户代码只需要提供两个函数。
 setup():这个函数在 Arduino板上电后只运行一次,可以用来设置 I/O引脚的输人输出模式,或者为整个程序都会用到的数据结构做初始化处理。
 loop():这个数在 Arduino板上电期间,会被不间断地反复执行。通常会被用来检查一些输人的状态,在此基础上做一些计算,之后作为响应,可能会改变一些输出的状态。

为了避免在本章中牵涉太多编程语言的细节,我们这里只看一个简单的、在大多数Arduino板上都能运行的例子:让 LED灯闪烁。
// 在大多数的Arduino板上,13号引脚已被连接到了一个LED灯上。
// 为引脚编号定义一个变量名:
int led = 13;

// 当你按下复位接钮后, setup函数会被执行一次:
void setup() {
// 把指定的引脚初始化为输出模式:
pinMode(led, OUTPUT);
}

// loop函数会被一遍遍地反复执行
void loop() {
digitalwrite(led, HIGH); // 使LED点亮
delay(1000); // 等待1秒
digitalWrite(led, LOW); // 使LED熄灭
delay(1000); // 等待1秒
}
看过这段代码后,你就会发现, setup()函数没做多少事情,只是把13号引脚设置为被控对象(因为该引脚已被连接到了一个 LED灯)。在loop函数中, LED灯先被点亮,然后又被熄灭。控制LED灯亮灭的电子开关在切换状态之前会有一秒的延时。按照Arduino环境的工作方式,每当一个周期(点亮LED灯,等待1秒,熄灭LED灯,等待1秒)结束因而退出loop()函数时,系统会再次调用loop函数重复上述过程。

调试
然而,当代码被推送到 Arduino上之后,游戏规则发生了变化。因为 Arduino通常不会连接显示屏,即便发生了错误也很难让你知道。即便代码能被成功编译,还是可能会发生某些错误:无法执行的操作会引起错误,例如除零或试图访问总共只有9个成员的列表中的第10个成员;程序可能会泄露内存,这将导致其最终停止工作。最糟糕的情况是,错误发生时,程序仍然能尽职地工作,但会给出完全错误的结果。

WhereDial的第一个商业化版本设置了一组 LED灯(共有6个),用作消费者级别的错误排查工具。有错误发生时,这些灯的亮灭模式可以帮助客户解决问题,或者能帮助他们在请求技术支持时对故障进行具体的描述。
捕获运行时产生的编程错误可能是比较棘手的问题,原因是,尽管C++语言有异常处理机制,但 avr-gcc编译器却不支持此项语法机制(可能是因为异常处理比较消耗内存)0因此, Arduino平台不允许你使用常见的 try…catch...逻辑。实际上,这意味着你需要在使用数据前先做检查。如果一个数有可能为0,把它用作除数前要先检查一下是否可以这样做。提前检查索引值是否超出边界。为了避免出现内存泄漏。

通常,完美的代码不是一蹴而就的。在创建代码的过程中,你需要一些手段确定错误的所在位置,从而防止它们再次出现。在没有显示屏的情况下, Arduino允许你使用 serial.write(),通过 USB线输出信息到 pc机。虽然你可以用 USB线传送各种数据,但调试信息尤其有用。 Arduino的 IDE提供了一个串口监视器,用来显示通过 USB线从 Arduino板传送来的各种数据,包括任何的文本信息,如日志信息、注释等,也包括 Arduino正在接收和处理的数据的细节信息(目的是对计算过程的正确性进行复查)。

Arduino把若干GPIO引脚暴露出来,通常还提供一个连接器(塑料做的杀状物,安装在引脚通孔之上,便于实现与导线之间的无焊连接,特别适用于跳线连接)。这个连接器针对原型制作做了优化,也针对“能够轻松地改变 Arduino板的用途”这一需求做了优化。

Arduino板上的每个引脚都有清楚的标记。不同的 Arduino板,从比较小的型号,如 Nano板,到标准尺寸的 Uno板,再到尺寸较大的型号,如 Mega板和 Due板,它们所提供的引脚各有不同。通常,你会看到电源输出端,如5V或3.3V(一般标记为5V和3V3,也有可能把33V标为(V),一个或多个接地端( GND),带有编号的数字量引脚,以及带有前缀 A和编号的模拟量引脚。

可以使用 USB连接从计算机给 Arduino供电。在原型制作阶段,这非常方便,因为总是需要使用串口连接为单板编程。 Arduino板也有一个用于连接外部电源的插座,项目发布后你会有更多可能用到它。这两种方式都能为微控制器及其所连接的一些常见的电子器件供电。(对于比较大的器件,例如电机,你需要为其连接外部电源,在需要的时候,通过使用品体管为这些器件供电。)

除了标准型号的单板,还有一些专注于特定应用的 Arduino板。例如, Arduino Ethernet板集成了一个以太网芯片,并把 USB接口换成了以太网接口,使其能够更容易地连接到因特网。显然,这种类型的单板对于物联网项目来说更为适用。

Lilypad板有完全不同的适用领域。它的形状是扁平的(正如它的名字所暗示的一样,它的形状像一朵花,1/0引脚的布局有点像是“花瓣”),并在设计上做了考虑,使其能容易地连接导电线。对于和可穿戴技术相关的项目面言,这是一块非常有用的单板。

选择一块有特定用途的单板不是扩展 Arduino能力的唯一办法。大多数 Arduino板遵从同样的布局,包括了各种 GPIO、 ADC和电源引脚。你可以在它们上面叠加一块附加的电路板,而这块电路板可以包含各种元件,以实现附加的功能。

在 Arduino的世界里,这些附加的单板被称为盾板( shield)。之所以被称为盾板,也许是因为它们遮盖住了实际的 Arduino板,看似起保护作用。

一些盾板提供了连网能力,例如以太网、 WiFi或 Zigbee等。电机驱动盾板使得连接电机和伺服系统变得简单了。一些盾板像手机一样连接了 LCD屏幕,一些盾板提供了电容感测能力,一些盾板能够从 SD卡播放 MP3文件或 WAV文件,还有具备其他各种功能的盾板存在。盾板的数量如此之多,以至于出现了一个专门的网站( http://shieldlist.org/)来对各种盾板进行比较和记录。

一块叠加了以太网盾板的标准 Arduino板,从功能角度看,和一块 Arduino Ethernet板是等效的。不过,后者更省空间(因为所有的组件都集成到一块单板上),但缺少了实用的 USB接口。(即便使用附带的适配器,也能够通过串口连接 Arduino Ethernet板,向其推送代码或与之通信。)
7.3.1 引脚
Arduino开发板上的引脚数量,根据开发板的类型是不同的。例如,UNO有20多根引脚,MEGA有70多根引脚。这些引脚都有自己的名字。

这些引脚可以被分成3类:
1. 电源引脚
利用电源引脚,可以为外界的扩展板或者硬件提供3.3V(引脚3V3) 5V(引脚5V)的电压,以及接地(引脚GND)的功能;也能通过引脚VIN接受外部提供的电压;在MEGA开发板中,电源引脚的位置大致如下:

  1. 模拟引脚
    区别于数字引脚只能输出0,1两种状态,模拟引脚可以输出0与1之间的中间状态。开发板有若干个模拟引脚,它们接收模拟量:0~1023,输出模拟量:’0-255’。
    输入输出范围不同应该是硬件设备的精度造成的。

它们被编成了0~N的数字号码,用A0~AN来表示。例如MEGA开发板上的模拟引脚有16个,就是A0~A15。

  1. 数字引脚
    只能输出0和1两种状态的引脚。开发板有若干个数字引脚,它们只接收或输出高低电平两个值:HIGH或者LOW。

它们被编成了0~N的数字号码,用D0~DN来表示。例如MEGA开发板上的数字引脚有54个,就是D0~D53。

这些数字引脚中,有的引脚还可以提供别的复用功能
 PWM(Plus Width Module)。通过控制脉冲信号周期的方式,来调节数字引脚输出的电压大小;

 通信引脚。作为串口输入和输出的接口;

不同的Arduino开发板,它们的引脚位置是不相同的,这里只是用MEGA开发板来做一个示例。目前我们只要知道有这些引脚的存在就可以了。今后要使用到这些引脚的时候,我们再来做详细的介绍。

*关于Arduino UNO开发板的详细介绍请参考官网。
*关于Arduino MEGA开发板的详细介绍请参考官网。
7.3.2 扩展板
Arduino的扩展板被称为盾板(shield)。
1. 官方扩展板
Arduino官方目前总共推出了5款扩展板。 分别是:
Arduino Motor Shield

Arduino Proto Shield

Arduino Ethernet Shield

Arduino GSM Shield

Arduino WiFi Shield 101

  1. 第三方扩展板
    Arduino是开放平台,有不少的第三方扩展板。根据开发者的需要,扩展出提供不同功能的接口。对于有能力的硬件开发者来说,可以随心所欲的设计适合自己的扩展板。
    例如下面这款双L293D芯片的马达扩展板

7.4 Raspberry PI
推荐书籍:《Raspberry Pi User Guide》

【树莓派】初识树莓派 - 小雨同学的技术博客 - CSDN博客 http://blog.csdn.net/diandianxiyu_geek/article/details/78937951
基于 Raspberry Pi 构建一个飞机观察器-极客 http://geek.csdn.net/news/detail/200441
实战!如何搭建一个完整的智能家居系统-极客 http://geek.csdn.net/news/detail/202573
【树莓派】使用NOOBS安装树莓派系统 - 小雨同学的技术博客 - CSDN博客 http://blog.csdn.net/diandianxiyu_geek/article/details/78949393
动手设置树莓派 Raspberry Pi 入门指南-极客 http://geek.csdn.net/news/detail/209561
使用树莓派打造家庭监控系统-极客 http://geek.csdn.net/news/detail/228376
树莓派Python实现超声波测距+人体红外传感器+温湿度+LED灯http://blog.csdn.net/qq_36070732/article/details/72890220

与 Arduino不同的是,树莓派设计的初衷更多是用于教育,而不是专门用于物理计算。树莓派基金会的受托人和联合发起人 Eben Upton的想法是,构建一台体积小巧且又价格低廉的计算机,就像他小时候曾经用过的计算机一样,可以用来编程和做实验,而不是用来玩游戏。从2006年开始,该基金会聚集了一批人,包括教师、程序员和硬件专家,对这些想法进行了反复研究。

在博通公司( Broadcom)工作的时候, Upton参与了 BCM2835 SOC芯片的研发。该芯片配备了一个异常强大的图形处理器( GPU),支持高清视频和快速的图像渲染。该芯片还包含一个主頻为700MHz的 ARM处理器,这个处理器几乎算是后来加进去的,虽然低功耗、廉价,但还能用。尽管树莓派基金会规模不大,但它却能够与大的供应商交涉,压低元器件价格。在很大程度上,这是由于它是一个慈善组织。对于功能比较强的 B型板(内建以太网连接),其最终成本大约在25英镑左右。这使得树莓派在价格上与 Arduino基本持平,但两者的硬件规格有很大不同。

下表对最新的、功能最强的 Arduino Due板和配置较高的树莓派 B型板的硬件规格做了对比。
Arduino Due 树莓派B型板
CPU速度 84MHz 700 MHz ARM11
GPU 没有 Broadcom双核VideoCore IV多媒体协处理器
RAM 96KB 512MB
存储容量 512KB SD卡(4GB+)
操作系统 引导程序 各种Linux的发行版本,也有其他操作系统可用
接口类型 54个GPIO引脚
12个PWM输出
4个UART
SPI总线
I2C总选
USB 16U2+原生主机
12个模拟量输入(ADC)
2个模拟量输出(DAC) 8个GPIO引脚
1个PWM输出
1个UART
有2个片选引脚的SPI总线
I2C总选
2个USB主机接口
以太网
HDMI输出(意味着可以不用买显示屏)
分量视频和音频输出

因此,树莓派实际上是一台计算机,能运行真正的现代操作系统,连接键盘和鼠标,接人因特网,并向电视或显示器输出高清图像。而Arduino拥有的原始计算能力,以及有限的内存和存储空间,致使它没有足够的资源去运行现代操作系统。重要的是,树莓派 B型板有内建的以太网接口(Arduino Ethernet板也有,但 Due板没有),还能使用廉价易用的 USB WiFi适配器,不需要像 Arduino那样使用“盾板”做扩展。

需要注意的是,尽管树莓派的硬件规格,即便和 Arduino家族中比较高端的 Due板相比,总体上也要强出很多,但不能因此就断定,树莓派要比 Arduino好。我们还需要考虑装置的用途。为了说明树莓派在物联网生态系统中的定位,我们需要像在之前介绍 Arduino一样,研究一下与树莓派交互的过程,让其像物联网装置那样做一些有用的物理计算工作。下面我们就将介绍这些内容。

树莓派受到了很大的关注,一方面是由于英国主流媒体对它的大肆宣传,另一方面也归因于黑客和创客圈常有的跟风现象。围绕树莓派已经出现了一些生态系统。因为树莓派能被用作通用计算机或媒体中心设备,并且不需要持续不断地用电子元器件制作原型,所以为树莓派找一个方便美观的外壳成了爱好者们第一位的需求。很多创客都在博文中介绍了他们各自的尝试,并且在 Thingiverse、 Instructables等网站分享了他们的设计,也有一些和外壳相关的商业项目存在。尽管有树莓 Arduino的开发者经常会有种似乎什么都已被人做过了的感觉。而树莓派出现的时间不长,局面更鼓舞人心。尽管有很多人在围绕树莓派做各种有趣的事情,但因为这是一个更高级、更强大的平台,所以人们的关注点也比较分散--从外壳设计到操作系统移植,再到媒体中心插件的设计,等等。物理计算只是其中的一个关注点。

操作系统
尽管有很多操作系统能在树莓派上运行,但我们推荐使用流行的 Linux发行版。
 Raspbian:这是由树莓派基金会发布的基于 Debian Linux的发行版,是默认的“官方”版本,当然也是树莓派用作一般用途时的一种很好选择。
 Occidentalis:这是由 Adafruit发布的 Raspbian的定制版本。与 Raspbian不同的是,该版本假设你以无外设的方式使用树莓派(不连接键盘和显示器),这样在默认情况下你就能远程连接到树莓派。若使用 Raspbian,则需要先做一个简单的配置。

对于物联网装置,我们推荐采用 Adafruit的发行版。你很可能不打算为装置配备键盘和显示屏,使用这个版本就能在第一时间避免配置的不便(即先要找到需要修改的地方,然后完成各种设置)0该版本让我们感兴趣的主要微调之处是;
 sshd( SSH协议的守护进程)是默认允许的,因此你能远程连接到控制台程序;
 采用零配置网络服务规范(zeroconf)对装置进行注册,注册的域名为 raspberrypi.local,这样你就能用此域名连接该装置,而不再需要知道或者去猜测网络分配给它的 IP地址是什么。

有些SD卡在树莓派上不太好用,似乎class 10级别的SD卡最好用。从产品的外包装上不一定能看出SD卡的级别,但在SD卡上能看到一个代表字母C的环形图形,里面有一个代表级别的数字。

现在,如果能从USB接口获得足够的电量,你的树莓派可能就启动了。很多笔记本电脑的 USB接口存在供电能力不足的情况,此时尽管代表进人运行状态的指示灯是亮的,树莓派却未能成功启动。如果不能确定供电能力是否有问题,使用自带电源的 USB集线器看似是最好的选择。

启动树莓派之后,就可以像和计算机通信一样与之通信。既可以连接键盘和显示器进行交互,也可以在使用 Adafruit的发行版时,通过前面提到的ssh方式进行通信。在 Linux或 Mac的命令行界面中键人如下命令,就能登录到树莓派(就像登录到一台远程服务器一样):
$ ssh root@raspberrypi.local

在Windows上,你可以使用诸如 PuTTY之类的 SSH客户端软件( www.chiark. greenend.org/uk/-sgtatham/putty/)。成功连接树莓派后,你就能为其开发软件应用了,其过程如同为Linux计算机开发软件一样容易至于到底有多容易,则很大程度取决于在 Linux上做开发的娴熟程度。
指导性的建议。对于教育领域的编程活动,该基金会推荐使用 python语言(实际上树莓派名称中的 Pi,其最初代表的就是 python)。
让我们看一下物理计算领域的”HelloWorld”,即无处不在的“让 LED灯闪烁”的例子:
import RPI.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BOARD) # 设置 GPIO的编号方案,使其与硬件相符
GPIO.setup(8, GPIO.OUT) # 设置 GPIO的8号引为输出模式
led = False
GPIO.output(8, led) # 初始化 LED灯的状态为“熄更“
While 1:
GPIO.output(8, led)
led = not led # 在下一轮环中切换 LED灯的亮灭状态
sleep(10) # 休眠1秒
最重要的问题可能还是开发环境的易用性。如果熟悉 Linux,做树莓派开发相对简单,但还是不如用 ArduinoIDE做开发。例如, Arduino一上电就开始运行代码了。而在 Linux下实现相同的行为,则需要使用若干机制,如在/etc/init.d目录下创建一个初始化脚本。

首先,需要创建一个脚本,例如/etc/init.d/StartMyPythonCode,运行该脚本时,如果使用 start作为参数,则开始运行代码;如果使用 stop作为参数,则停止运行代码。然后,需要使用 chmod命令,把脚本标记为系统可以运行的状态:chmod +x /etc/init.d/StartMyPythonCode最后,通过执行 sudo updaterc.d StartMyPythonCode defaults命令,对该脚本进行登记,使其能在装置启动后即被运行。
如果熟悉 Linux,可能对这种自动启动服务的机制并不陌生(或许还有更好的替代方法)。如果不熟悉的话,可以搜索一下”Raspberry Pi start program on boot”。

Arduino的调试能力非常有限,主要包括通过串口输出数据和观察 LED灯的闪烁情况。相比之下,运行于 Linux之上的 python代码能让你体会到编程语言的优势和使用操作系统的好处。你可以使用 on的集成调试器一步步地执行代码,使 Linux的 strace命令附着到代码对的进程,查看日志,观察内存使用情况,等等。只要装置本身还没有死机,你就能够使用 ssh登录树莓派,在程序停止工作时(或程序还在运行但功能异常时)做一些调试。
因为树莓派属于通用计算机,不像 Arduino那样有严格的内存限制,你能够简单地使用 try.一 catch.一逻辑捕获 python代码中的错误,并决定怎样处理这些错误。例如,你通常可以利用这个机会对错误的细节进行记录(对调试过程有帮助),并会判断能否对意料之外的问题进行处置,然后继续运行代码。最差的情况下,你可以简单的计脚本停止运行,然后再让它重新运行。
Python和其他高级语言还具备成熟的测试工具,让你能够对程序预期的行为做断言,测试程序的行为是否正确。这种自动化测试能帮你搞清楚自己完成的代码是否正确,并且能在程序做其他修改后再次运行,从而确保对代码某部分进行的修改没有造成其他能够正常工作的部分出现错误。
树莓派有8个 GPIO引脚,和电源以及其他接口被一同引出,组成一个2x13的双排针区块。与 Arduino不同的是,树莓派上的引脚没有被一一标记。这样做是因为树莓派上的组件数量更多,也因为使用 GPIO引脚的人估计会比较少,所以树莓派不鼓励把元件直接焊到单板上。这样做的意图是让你把一个连接器(IDC或类似形式)插到整个双排针区块上,使其连接到一块分接板,再在分接板上用 GPIO做实际的事情。
另一种可选的方式是用一端为母接头的跳线连接单独的引脚,跳线的另一端连到面包板。在原理图上能查到各个引脚的功能标注。用一根母对公跳线连接头针和面包板上的插孔是最容易的。如果你只能找到母对母跳线,可以简单的在面包板上插一个排针即可,或者把一根公对公跳线和一根母对母跳线连起来,自己做一根母对公跳线。可以从 Adafruit、 Sparkfun和 Oomlout等面向业余爱好者的供应商,或者从诸如 Famell等规模史大的电子元器件供应商那里买到这些跳线。

排针区块同时提供了5V和3.3V的输出。然而 GPIO引脚本身只能承受3.3V的电压。树莓派不具备任何的过压保护机制,如果给这些引脚提供了5V的输人电压,就有损坏单板的风险,可选的两种应对办法是要么谨慎行事,要么使用具备过压保护能力的分接板。到写作本书时,还没有可供推荐的此类分接板。不过,树莓派官网上介绍的 Gertboard看似有望进人推荐名单。

请注意,树莓派没有提供任何模拟量输人( ADC)能力,这意味着在连接传感器时会有一些限制,只能直接连接提供数字量输人(即像按钮一样的on/off输人)的传感器。为了能从光电转换装置、温度传感器、电位计等输人装置获取读数,你需要通过 SPI总线连接一个外部的 ADC模块。你可以在网上找到具体的操作指导,例如, http://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume- with-the-raspberry-pi/overviewo
我们之前提到过,给树莓派供电会碰到一些问题。尽管树莓派采用标准的 USB线供电,但从笔记本电脑、带电源的 USB集线器或 USB充电器经由 USB线获取的电压会有很大不同。如果无法启动树莓派,就需要检查一下供电能力是否满足需要,并换个电源试试。

树莓派的用途之一就是用来创建“便于折腾”的物件,因此很多组件是高度开放的,例如,诸如 Raspbian(基于 Debian)之类的 Linux定制版本, ARM VldeoCore的驱动,等等。这不足为奇。最核心的博通芯片本身是一个专有硬件,博通公司只发布了 BCM2835芯片的不完整数据手册。然而,树莓派核心团队的很多成员是博通公司的雇员,他们一直在积极地创建驱动和诸如此类的程序。

应用案例:RFID+树莓派 刷卡开门。
7.5 BeagleBone
BEAGLEBN BeagleBone 开发板 | 德州仪器 TI.com.cn http://www.ti.com.cn/tool/cn/beaglebn

在 BeagleBoard团队设计的单板中, BeagleBone Black是最小巧便宜的。它的外形尺寸和树莓派差不多。尽管这两种单板的规格大体相似,但还是存在一些有趣的差异之处。开源的,因此你可以下载到各种设计资料,包括原理图、材料清单和 PCB布线图”( http://beagleboard.org/)o在 BeagleBone上预装的Angströrn Linux发行版也是完全开源的。
从最新版本的 BeagleBone平台, BeagleBone Black,可以看出树莓派带来的影响。尽管它还是缺少模拟视频和音频连接器,但却增加了 micro-HDMI连接器,用来提供数字音视频输出,其售价也降到了与树莓派很接近的31英镑,并且还保留了原来 BeagleBone所具有的、比树莓派要好得多的与电子器件的接口能力。
还具备至关重要的用于模拟量输入的ACD引脚,而这正是树莓派所缺失的。
BeagleBone Black板 树莓派B型板
CPU速度 1GMHz ARM Cortex-A8 700 MHz ARM11
GPU SGX530 3D Broadcom双核VideoCore IV多媒体协处理器
RAM 512MB 512MB
存储容量 2GB eMMC + microSD卡 SD卡(4GB+)
操作系统 各种Linux的发行版本,也有其他操作系统可用 各种Linux的发行版本,也有其他操作系统可用
接口类型 65个GPIO引脚,其中有8个支持PWM
4个UART
SPI总线
I2C总选
USB 从机 + 主机
以太网
Micro-HDMI输出
7个模拟量输入(ADC)
CAN总线 8个GPIO引脚
1个PWM输出
1个UART
有2个片选引脚的SPI总线
I2C总选
2个USB主机接口
以太网
HDMI输出(意味着可以不用买显示屏)
分量视频和音频输出

和树莓派一样的是, BeagleBone是一台主要运行Linux的计算装置,但 BeagleBone也能运行其他各种经过移植的操作系统。与树莓派不同的是,通过显示装置和键盘与本地用户交换信息并不是它的默认选项。

这两种单板都配备了以太网接口(采用树莓派 B型板),并且在需要的时候能利用廉价的 USB WiFi适配器连网,这对物联网装置而言是非常重要的。

如果 BeagleBone的实际优点只是 CPU速度稍快一点,(在我们看来)外观设计更加美观一些,就没有充分的理由专门辟出一节来介绍这个平台,更不要说实际购买了(考虑到它的售价)。

BeagleBone的扩展板一般被称为 cape,而不是盾板( Arduino扩展板的名称):尽管 BeagleBone也能胜任通用计算平台的角色,但它的目标市场比树莓派要窄得多。正因为这样, BeagleB。 ard团队选择了一条中间路线:为每块单板预装?ngs m Linux发行版。尽管其他几种操作系统也已经被移植到了 BeagleBone平台,但有预装的默认系统也意味着开始使用和评估单板的过程会变得更简单。如果你喜欢BeagleBone默认支持零配置联网,其在网络内公布的域名通常为 beaglebone.local。你可以用若干种方式连接到 BeagleBone你可以连接到一个非常有用的、极好的、交互式的系统参考手册和硬件文档页面,其地址通常是http://beaglebone.local/README.htm。你也可以在http.//beagIeboard.org/static/beagIebone’latestfREADME.htm找到这个手册,不过在这种情况下就缺少有用的互动效果了。

Cloud9在线托管的版本位于 https://c9.io.尽管在线版本的 Cloud9环境也支持 Ruby和 Python,但免费组件版本只支持Node.js, Node.js是一个建立在 JavaScript之上的框架,在其官网上有如下介绍。

BeagleBone在出厂时已经预装了Angström Linux发行版。该操作系统是专门针对嵌人式装置开发的,只要有4MB的闪存就能运行。

与树莓派上的 Occidentalis十分相似,Angström被配置为以“无外设”方式运行,不需要键盘和显示器。通过 USB串行连接,或者使用零配置连网方式并连接到 beaglebone.local,都可以方便地使用命令行接口。

预装操作系统的好处之一是,你开箱之后就可以马上开始使用单板。当然,你会看到操作提示,作为首先要完成的步骤之一,如果当前的敝本不是最新的,建议先更新操作系统。当你对单板做完简略的评估,在准备继续用它构建项目的原型之前,把操作系统升级到最新版本当然是一个好的做法。
和树莓派一样,你可以使用终端程序连接到 BeagleBone,之后开发软件应用的步驟,和在任何其他的 Linux计算机上做开发是一样的。在上一节中,我们已经指出,如果你已经熟悉 Linux编程,在 BeagleBone上做开发就是一项简单的任务,我们依旧还是从老套但值得信赖的“让 LED灯闪烁”这个例子开始介绍。在 README.html页面中,给出实现这个例子的代码:
require(‘bonescript’);
setup = function() {
pinMode(bone.USR3, OUTPUT); // 允许对LED灯USR3进行控制
}

loop = function() {
    digitalWrite(bone.USR3, HIGH);  // 点亮LED灯USR3
    delay(100);                     // 等待100ms
    digitalWrite(bone.USR3, LOW);   // 熄灭LED灯USR3
    delay(100);                     // 等待100ms
}

与之前的例子相比,代码的编写思路实际上没什么变化。虽然语法细节有所不同,但还是需要实现setup和 loop两个函数,需要把引脚设置为输出模式,然后以一定的时间间隔向该引脚交替地发送 HIGH和 LOW两个值。
与 Arduino不同的是,系统不会在重启之后自动运行代码。不过,一旦你完成应用开发,就可以把它复制到 autorun子文件夹,这样系统在重启之后就会自动运行该应用。

因为主要面向物理计算领域, BeagleBone单板上可用的 GPIO引脚数量要比树莓派多得多,其中一些单板配备 ADC(使其能处理模拟量输人,而树莓派则不具备这项能力),另一些单板提供了 PWM能力(使其能近似的提供模拟量输出)。尽管各个引脚都沿着单板的长边,每个边两排,整齐地排列在单板的两侧,但 BeagleBone还是没有足够的空间,像 Arduino那样,对每个引脚都做标记。不过,每一组引脚都有标记,其中的每个引脚的功能在文档中都有介绍。和树莓派相同的是,根据使用该引脚的子系统的不同,每个引脚可以对应不同的名称。如果习惯了 Arduino上简单而受限的命名(标记)规定,可能会觉得这样做过于复杂了。

基于 JavaScript 开发 IoT 入门指南-极客 http://geek.csdn.net/news/detail/204213

7.6 TPYBoard
TPYBoard是遵守MIT协议由TurnipSmart公司制作的一款MicroPython开发板,它是基于STM32F405单片机,通过USB接口进行数据传输。该开发板内置4个LED灯、一个加速传感器、时钟模块,可在3V-10V之间的电压正常工作。借助Micro Python,用户完全可以通过Python脚本语言实现硬件底层的访问和控制,比如说控制LED灯泡、LCD显示器、读取电压、控制电机、访问SD卡等。

Micropython TPYBoard之无线加速度小车-极客 http://geek.csdn.net/news/detail/253317
Micropython TPYBoard 智能温控小风扇资料分享-极客 http://geek.csdn.net/news/detail/252870
Micropython 红外防坠落小车实验教程-极客 http://geek.csdn.net/news/detail/251483

7.7 OpenIOE
赛灵开源社区淘宝店
https://celerstar.taobao.com/

OpenIOE 官网
http://www.openioe.net/

OpenIOE MicroPython IDE V1.6 发布!-极客 http://lingcreat.celerstar.com/ask/php/uploads/20171025205418LoDnM0VIHvxfEhQkQQ%E6%88%AA%E5%9B%BE20171026045343.png
7.8 手机和平板电脑
新式的手机和平板电脑,不管它们搭载的是 i0S系统(iPhone/iPad),还是安卓、黑莓或 Windows系统,都配备了陀螺仅和温度计等传感器,装有一个或多个能捕捉静态图像和录制视频的摄像头、麦克风、 GPS、 WiFi、蓝牙、 USB、 NFC(非接触式银行卡或交通卡也是采用相同的技术)、按键以及支持多点触控的屏幕。

手机通过 WiFi或手机网络能提供持续的因特网连接。很多平板电脑也能提供同样的功能。这些装置还配备了若干种有吸引力的输出方式:高保真音頻输出、高质量视频,以及一个或多个震动元件。它们的处理能力也与树莓派相当。(目前看来,它们做通用处理的速度可能比树莓派快。但由于树莓派的 GPU异常强大,它们在图形处理方面会相对慢些。

表面看来,使用移动终端创建物联网应用似乎是一种完美的解决方案。然面,这种诱惑往往要依赖于该装置作为电话的功能。在这种情况下,你实际是在为该装置创建一个应用,而不是在创建新的“物品”。尽管可以对移动电话的输人能力进行非常有创意地利用(例如,通过分析皮肤颜色中红色成分的变化情况,使用摄像头测量脉搏),但把它连接到附属的电路或输人器件却不大容易实现。
最后,这些移动终端太大太贵了,不能被安装到任意的消费电子装置中。

展开阅读全文

没有更多推荐了,返回首页