最近有时间,总结了一下关于树莓派3及Windows 10 IoT的基础知识。适合没有接触过硬件但有一定编程经验的读者入门。我自己刚刚买树莓派的时候花了很长时间入门,搞清楚各种概念和属于。很多网上的帖子都是分散在各个角落的,并且是英文的,有些还是过时的,有些是爆的,所以我觉得有必要总结一篇基础入门帖子。这篇文章讲的都是抛砖引玉的概念,并不包括End-To-End的Case,想要做一个完整实验的文章,请看我博客的物联网开发系列文章:http://edi.wang/category/list/iot 

如果有错误和补充,欢迎在评论里指出。

一、树莓派3

树莓派是基于ARM芯片的卡片电脑,大小和一张信用卡一样。今年推出了第三代,集成了板载蓝牙和WIFI。之前的树莓派1和2都是需要用USB WIFI和蓝牙实现的,所以你要是购买树莓派,买3是最方便的,可以省去USB WIFI和蓝牙的配件。并且Windows 10 IoT的最新版已经支持了树莓派3的板载WIFI和蓝牙,使用没有问题。

物联网开发板有好几种,树莓派只是其中一种比较流行的。我也推荐使用树莓派入门,毕竟资料和周边配件都是很全的。

树莓派3相对2有如下改进:

A 1.2GHz 64-bit quad-core ARMv8 CPU

802.11n Wireless LAN

Bluetooth 4.1

Bluetooth Low Energy (BLE)

1GB RAM

4 USB ports

40 GPIO pins

Full HDMI port

Ethernet port

Combined 3.5mm audio jack and composite video

Camera interface (CSI)

Display interface (DSI)

Micro SD card slot (now push-pull rather than push-push)

VideoCore IV 3D graphics core

购买价格大概在200-300之间,不同代理商价格不一样。买回来的产品只含有一块主板和说明书,不包括SD卡。关于SD卡的选购文章后面会有讲解。SD卡的作用就相当于树莓派这台电脑的硬盘,操作系统必须烧录在SD卡里才能启动树莓派。你可以简单的理解为,你买的树莓派就是个不带硬盘的电脑主机,当然也不包括显示器。

树莓派3的接口布局如下:

其中,USB是2.0的,因为成本问题,树莓派3不能卖的太贵,用不上3.0。CSI接口是树莓派专用的摄像头接口,你也可以使用USB摄像头。但是USB摄像头的帧率只有5fps,CSI可以达到30fps。同样,Display也是树莓派专用的显示器接口。然而,这个接口所搭配的显示器需要占用GPIO端口,我们针对树莓派上所连接的硬件编程就是通过GPIO的,所以并不推荐选购这个接口的屏幕,比如官方的。树莓派有HDMI接口,推荐使用HDMI,不会占用GPIO。如果要触控,有些HDMI屏幕可以通过USB实现触控,只会占用一个USB端口。

网线接口插入的是标准网线(RJ-45),为什么我们有WIFI了还要网线呢,一是因为操作系统第一次初始化的时候并不知道你的WIFI SID和账号密码,需要用户去指定,然而物联网开发的很多场景下你并不能直接像操作电脑一样操作树莓派,通常是远程通过IP操作,所以必须用有线网络。插入网线就能获得局域网IP。另一个原因是有线网络的速度远大于WIFI,对调试程序比较有利。

二、面包板的使用

面包板是用来给你插拔电子元件的,可以随便购买,因为都是通用的,不是树莓派专用的配件。做任何电子实验都一样。一般买来的面包板长这样:

其中,最上面和最下面的两对红蓝线,一般做电源线使用,这两条线背后的孔是水平联通的,一般都是从他们引出电源的正极和负极给板子中间的洞洞眼使用。而中间的洞洞(A-E, F-J)的背后是垂直联通的,这个一定要注意,不然可能会插爆元件,造成短路。

正确的电路示意图如下:

其中,绿色覆盖的洞洞表示通电的孔,可以看到,底端是水平的,而A-E是垂直的。

面包板有好几种规格,根据不同的场合购买不同的面包板。推荐大家买一块Full size的,几块mini的,基本就够用了。

如果你不清楚面包板的排线规律,建议先用干电池和LED做联通实验,不要直接接入树莓派。如果短路,树莓派默认是会重启系统的,但电流过大也很有可能损坏树莓派。

面包板的背面是3M贴纸,用来把面包板固定在实验台上。

三、杜邦线

用来连接树莓派和电子元件的电线叫做杜邦线,长这样:

根据两端接口的不同,分为三种:

公对公

公对母

母对母

图上就是公对母的线。公的意思就是插别人的,母的意思就是被人插的,所以一看图就明白了。在平时的实验中基本这三种线都要用到,所以建议一次性购买。

四、 树莓派3的GPIO端口

GPIO的意思是General Purpose Input Output (通用输入/输出),可以插人,也可以被插。我们做物联网开发使用的传感器都是通过GPIO操作的。树莓派3的GPIO布局如下:

对应主板上的布局如下:

其中,3.3V,5V表示电源输出的正级,这些端口不能通过编程操作,只是简单的供电。GND是电源负极。其他端口都可以通过编程操作。GPIO是通用端口,SPI和I2C是特殊端口,操作方式和GPIO不一样。稍后会介绍。

所以,如果要通过GPIO点亮一个LED灯泡,在不要求程序的情况下,可以直接接入3.3V输出及GND,也就相当于接了干电池:

如果要通过编程方式操作灯泡的开关,就得先了解GPIO的操作方式。GPIO模式分为输入和输出,值是高电平和低电平。比如,你的LED负极接入了GND,那么你要点亮LED,就必须给它的正极通电对吧?那么对于LED来说,正极是输入电流的,所以对应的GPIO端口应该是输出,GPIO值是高电平,这样就能点亮LED。这里我用的是通俗易懂的说法,并不严谨,如果你有电路基本知识就知道不是这样的。。。。

简单粗暴的理解,就是,GPIO High表示电源正极,GPIO Low表示电源负极。你买的传感器都有说明,哪个针脚输入高电平会产生什么操作,传感器遇到什么情况会在哪个针脚输出低或者高电平等等,这就是物联网开发的基本原理了。

五、电子元件和传感器

树莓派的外设和电脑一样,可以简单分为输入设备和输出设备。比如,LED灯泡、蜂鸣器、电机、电机驱动板就属于输出设备,那么他们对应的GPIO都应该用Output Mode。而温度湿度传感器、人体红外传感器、光线强度、声音、酒精等就属于输入设备,那么他们对应的GPIO就应该用Input Mode。

不同厂家生产的传感器定义不一样。比如蜂鸣器,通常有3个针脚,VCC代表正极,接树莓派的DC 3.3V,GND接GND,还有个Signal针脚,就接GPIO,等待输入信号。

有的蜂鸣器是低电平触发的,所以只有GPIO输出Low才会响。有些是高电平触发的,所以GPIO得输出High才会响。至于怎么用代码操作GPIO后面会讲解。

而对于输入设备,比如声音传感器,在遇到声音时候,有些厂家的输出低电平,有些输出高电平。那么在代码里,就得检测对应GPIO端口有没有输入,然后进行逻辑操作。

总之,传感器都不一样,购买和使用必须仔细阅读说明,不然可能会损坏传感器或树莓派。尤其是对电压有要求的传感器,比如HC-SR04这种,输入5V输出5V的,GPIO只能接受3.3v,就必须加电阻分压才能使用。

推荐大家购买传感器的同时,买一个常用电阻包,某宝有很多打包好的,不同阻值的电阻,几百个,才几块钱,足够用了。

六、Windows 10 IoT Core

树莓派的官方操作系统是Linux的一个分支,叫做Raspbian。作为软狗,我们怎么可以用Linux?所以必须用Windows 10来装逼。在装逼之前,首先得保证你的SD卡能承受这个逼格。据我亲测,Windows 10 IoT兼容最好的,是三星的EVO和EVO+系列SD卡:

32G,64G都是可以的,推荐大家买32G的,便宜不少也足够用。

然后你需要做这些步骤:

下载Windows 10 IOT Dashboard

https://developer.microsoft.com/en-us/windows/iot/Downloads.htm

 

下载Windows:

http://ms-iot.github.io/content/en-US/win10/GetStarted/SetUpYourDeviceManually.htm

 

如果你需要看Release Note:

https://developer.microsoft.com/en-us/windows/iot/docs/releasenotesinsiderpreview 

之后,就用IOT Dashboard把Windows刷入SD卡,这个官网下载页面有非常详细的图文介绍,我就不多说了。

需要指出的是,刷完SD卡,根目录里会有个config.txt,这个是树莓派专用的,不是Windows的文件,所以得按照官网的文档来配置。文档在这里:

https://www.raspberrypi.org/documentation/configuration/config-txt.md

默认情况下不需要改任何东西,一般只有你的屏幕和Windows 10不兼容才要看着改。比如我用的微雪7寸屏,就需要改成:

max_usb_current=1
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt 1024 600 60 6 0 0 0

不然Windows就会花瓶。。。

第一次启动Windows后,插入网线,然后打开电脑浏览器,输入树莓派的IP地址(可以在树莓派的屏幕上找到):http://树莓派IP:8080 

然后用默认账号登陆:Administrator, p@ssw0rd

第一次登录后记得改密码,不然局域网里任何人都能操作你的树莓派了。

七、写代码

Windows 10 IoT Core上跑的是UWP的应用程序,所以API和UWP的手机、PC开发完全一致。所以,你需要的工具依旧是VS2015+Windows 10 PC。

唯一的差别就是得添加Windows IoT Extensions for the UWP的引用,因为操作GPIO的API都在这个里面。。。

针对GPIO操作的样例代码如下:

using Windows.Devices.Gpio;
 
public void GPIO()
{
    // Get the default GPIO controller on the system
    GpioController gpio = GpioController.GetDefault();
    if (gpio == null)
        return; // GPIO not available on this system
 
    // Open GPIO 5
    using (GpioPin pin = gpio.OpenPin(5))
    {
        // Latch HIGH value first. This ensures a default value when the pin is set as output
        pin.Write(GpioPinValue.High);
     
        // Set the IO direction as output
        pin.SetDriveMode(GpioPinDriveMode.Output);
 
    } // Close pin - will revert to its power-on state 
}

这段代码就是向GPIO 05端口输出高电平的代码。如果你有个LED的正极是接在GPIO 05上的,负极接在GND上,那么这段代码是可以点亮你的LED的。

部署UWP应用到树莓派的方式一般是通过网络,VS可以自动部署到Remote Machine,或者用Windows 10 IoT的网页portal上传appx部署。这些微软物联网开发官网都有非常详细和友好的介绍,请看:

http://windowsondevices.com/ 

微软官方有个很好的例子库,在这里,强烈推荐大家学习参考:

https://github.com/ms-iot/samples

八、其他

树莓派壳的选购

有一点要注意:壳子的高度是否兼容散热片,如果你买了散热片,有些compact的盒子盖不上的,会爆。最好选0.5mm高度的散热片,基本能兼容市面上的任何外壳。

对于散热,大部分情况根本用不到风扇,散热片足够了。

你还可能需要的工具和配件有:

电烙铁、焊锡、焊锡膏、老虎钳、美工刀、迷你手电钻、元件收纳盒、实验台垫板、M2.5(树莓派主板的孔径是M2.5), M3(大部分传感器的孔径是M3)铜柱及螺丝螺母、木板、有机玻璃板等等,这些都是常用的做物联网产品的东西,建议一次性购买。