6

【.NET与树莓派】上手前的一些准备工作

 3 years ago
source link: https://www.cnblogs.com/tcjiaan/p/14271116.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【.NET与树莓派】上手前的一些准备工作

.NET Iot 不是什么新鲜事物,百科很强大,故老周在此也不必多介绍。现在的时代和老周当年学 QBasic 的时代不同,那时候拉根电话线上网,下载速度只有可怜的 3.5 kb/s。而且还要去店里买上网卡。上网卡用完了(计时的哟)还要再买。除了买上网卡的钱外,还要交 0.2 元/分钟的附加费(中国电信收)。

所以,你想想那时候有些什么概念、名词解释不懂的,都是往书上找,或者往图书馆跑;到了图书馆还要交 100 大洋的押金。上网成本高,速度慢,很多东西都懒得上网查。

现在不同了,小孩子们多幸福!几乎每天在线 20 小时以上。网络也基本覆盖,所以呢,名词解释之类的东西就不必像以前那么当回事了,啥时候需要,直线网上找。

老周习惯在开始之前扯些题外话,多年养成的坏习惯,打70大板也改不了,请各位莫见笑。

老周接下来计划写一系列烂文,主要讲述用.NET开发硬件控制方面的东东(其实这个挺好玩的,上大学的时候居然没有机会玩,可惜了,不然泡几打小学妹不成问题)。当然了,要在板子上跑.NET 程序,对开发板是有要求的——起码无操作系统的板子就没办法了。有操作系统的板子里面,名气较大的当数树莓派了。

树莓派以前在书上看过,但不流行网购的年代,去实体店根本买不到(也不知道上什么类型的店买)。所以,一直没机会去体验一下。之后就放一边了,也没去想了。但若干年后回头想想,还是要玩一下的,不然这码农生涯就不专业,不完美了。于是,模糊地记得在 201x 年从二手平台买了一块,也不知道是几代(肯定不是3、4代)的,买回来只是装了系统耍了两下。然后……说起来丢人,吃灰了。

疫情快一周年了,相信各位都记得 2020 年那个春节的,反正我是觉得比当年“非典”时还恐怖。当初“非典”横行时,我们还正常上学上课,只是个别工厂没开工,也没戴口罩,最多就是用消毒粉洗洗地。也许是当年信息滞后的原因吧。

于是就宅在家里搞破坏,就想着把一些电器(尤其是一些什么智能台灯、DVD机的)自己改装一下,能不能弄成像小时候在奥特曼里面看到的那些高大上设备,可以远程控制,还可以用手招呼一下就能控制家里的东西——大概就是现在所谓的“智能家居”吧。看着别人演示总觉得不够意思,自己弄出来的才有成就感,就算弄成了人工智障也不要紧,重点是自己亲自体验过。

最初的思想火花就是想用无线网络来控制各种遥控器,想想在家里放几个红外发射器,然后树莓派上运行个Web服务器,这样各种客户端只要开个浏览器就可以控制红外发射器,家里的电视、盒子、风扇、电灯、红外摄像头就可以集成在一块了。遥控的键码可以用红外接收模块记录,然后存入数据库。用的时候从数据库里提。

头脑一发热,做事就迅速。在某宝买了一块 Raspberry Pi4 B型。买回来一看,哇,your god,还是 1.4 版本,挺新鲜的。

其实嘛,那个最初的想法并没有完全实现,仅仅控制了两台DVD和一个“芒果云”智能盒子而已。

好,又扯多了。本篇作为这一系列的开头,咱们不写代码,老周简单说说要准备些什么工具和装备。

一、软套装

软件方面,很简单。

1、开发工具。我们熟悉的 Visual Studio,或者 VS Code都行。

2、开发机。这个嘛,还是在电脑上写代码的好,树莓派那点配置还是挺弱的。

3、树莓派上的系统。这个还是用官方的系统好一点。这里老周说一个事,官方系统有个轻量级版本(Lite),就是带 Linux 核心功能,没有桌面部分,也没有带附加软件,纯命令控制。这个版本其实很好,但是总出现一个现象——开机不会自动连接无线网(配置了也没用),或者一直提示正在搜索网络。但是,安装带桌面的版本就没有这个问题。这个问题一直存在,目前不知原因。

二、树莓派开发板必备件

买板子时,你需要买一张 Micrio SD 卡,就是你手机用的内存卡。老周建议 32 G吧,16和32的价格差不多的,所以不如直接上32。如果你有很多内存卡,那就不用买了。有些某宝店卖的杂牌卡,还宣称树莓派专用,其实压根不必要。老周做过测试,用了几个世纪的金士顿(从行车记录仪上拔下来的)和闪迪(手机和电视盒子上都用),写入系统后正常运行,而且速度还不错。总之,随便即可。

写入系统镜像是在电脑上进行(多数情况下是这样的)的,所以,读卡器要有,或者如果你有带内存卡口的 USB Hub 也行。这个老周建议买好的,质量太差的真的用出一大堆问题来。老周家里的各种集线器、转换线都是绿联的,不是做广告,真的好用。记得前两年,买了个外置光驱,那种 0.8 元包邮的数据线老是识别不了光驱,识别出来了,读碟时经常断。我曾怀疑过光驱,但用戴尔笔记本拆出来的光驱测试也是不行。最后买了一根绿联的线。即插即识别,而且不断线。真的,一分价钱一分货。

关于电源,树莓派的供电口好像每一代都不太一样,我买的 4 代是 C 口。原装电源挺贵的,可以买其他的,5V / 3A 即可。另外,还有两种选择:

1、充电宝。新款都能输出最大 3A 的。

2、带外部供电的 USB Hub。比如这种。

 号称工业级的,能正常供电,它带12V/4A的外部电源,输出口是5V。无外部电源的 USB Hub 带不动。

3、干电池 + 电池盒。这种不怎么好用,干电池电量减小后电压会跟着降的,很容易挂。

4、可调电源。就是可以调节电压的电源,这个除非你舍得买贵的,便宜的不怎么好用。老周买过便宜的,被它电过两次。

实际使用测试,5V/2A、5V/1A的供电也能让树莓派正常运行。总的来说,电流大小由负载决定,重点是电压,要选5V的。电压太高的话可能会导致树莓派升级为“烟雾”版。

三、其他装备

1、面包板。接线多了这个方便。

2、杜邦线。这个肯定要的了,至少买多长,自己看着办,实验的实,10-20 CM 可以了。

3、盒子。这个是可选的,就是给树莓派加个盒子,一来起保护作用,二来可以散热(塑料的估计散不了热,要贴散热片)。老周买的盒子是金属的,还不错,CPU 一直在36度左右。

4、网线。老周直接拿买路由器时送的线用,简单快捷。虽然树莓派有无线网卡,但有线网卡更快,用网线直接连到电脑的网线接口上,在电脑上用 SSH 登系统比较快。

5、“T”形扩展板。因为我把树莓派装进盒子里,接线就不方便了,所以买块T形板,把 40 个引脚引出来,扣在面包板上,接线就方便多了。

367389-20210113122120231-1603502877.jpg

上面的图是盗来的,出处不明。接的时候注意方向要一致,不要弄反了

6、电子放大镜。电子模块比较小,视力不好的话不太好操作。有些地方就算视力好也不好对付。可以买个电子放大镜,带LED灯可以照明。USB与电脑连接,用法和外置摄像头一样,用 Win10 自带的相机就行。不用买太强大的,能放大、有灯就行,一般 50 块大洋左右。

367389-20210113122917279-1386514136.jpg

7、万用表。这个不是必要,但可以有。测电压电阻很有用。

8、灭火器。这个嘛,有些教程上会提到,不过老周觉得没那么严重吧,一般操作也烧不起来。

9、消除静电刷。这个老周觉得是可选的,释放身上的静电有个方法很简单,把你自己接地就行,两只手在墙上或者地上按一下就行。不过,老周家里有现成的消静电工具,本来是用在黑胶唱片上的。这个你用过留声机就知道,静电太多的话,播放唱片时会炒豆响。而且老周的唱机有问题,安装唱针的电路不太好,静电多了功放会放不出来,断断续续。如果你怕静电会伤害树莓派和电子模块,可以某宝弄一个刷子,接触设备前在手上刷几下。

四、其他开发板

树莓派算是比较高级的板,它有操作系统,很多时候也可以用树莓派来控制其他板子,尤其用到模块较多的时候,总不能全都接到树莓派上吧。此时就可以考虑把一部分工作分给其他开发板去完成,树莓派作为主控中心,指挥其他板子工作。

比如下面这个板子也不错,意大利原装进口。100 多大洋吧,比树莓派便宜。其实这些在他们国家也不算贵,但兑成 RMB 就贵了点。

367389-20210113153135363-1787967987.jpg

你要是觉得上面的板子贵,那下面这两个就便宜,十几大洋一块。

367389-20210113153302209-1734213198.jpg

当然了,还是那句话,一分价钱一分货。以上两款是国产的,也不知道哪个厂商,反正某宝上大把。注意这些非原装的板子,在连接电脑时要手动安装驱动,网上可以找 CH34x 芯片的驱动,一般是 CH340 和 CH341。一个版本不行的话,可以多试几个,非官方的版本装驱动是头疼一点的。原装主板的话 Win 10 能自动识别。

这种便宜版本不太稳定,经常会出现上传程序失败的情况,而且焊接的引脚有的会摇摇晃晃,有的引脚是弯的,不是很好用,但也能用。老周买了两块 Nano 板,有一块做成温度计,挂在家里长期使用。另一块会严重发热,烫手的,原因不明。

Arduino 的板子不像树莓派,不能装系统;树莓派是一台完整的计算机,只是相对一般电脑来说,性能还是有差距的(任凭官方怎么宣传,但实际情况是如此)。所以,树莓派上你可以用.NET(C#/VB.NET),可以用 Go,用 Python,或者直接C++;而 Arduino 上用的其实就是C++语言。

关于开发板之间的通信,你可以有以下选择:

1、有线连接,使用串口通信(交叉连接 TX,RX 引脚)。这个方案不错,也好摆弄,跟读写文本文件差不多。

2、有线连接,使用 IIC/I2C、SPI 等标准协议。让树莓派作为主机,其他板子作从机。树莓派可以指手画脚来命令其他板子干活。就相当于树莓派是主子,其他板子是打工的。树莓派:“小顺子,帮我测测水压”,板子A:“Yes, sir”。

3、无线串口,比如 ESP8266 系列,方法和一般串口差不多,只是它可以无线传输,能实现透传。

4、自己设计的协议。设备之间通过高低电平,以及持续的时间,可以组合出许多通信规则。所以,这个协议你完全可以自己设计。比如,板子B发送一个字节给树莓派,可以约定:每个二进制位以低电平开始,并持续50微秒;50微秒后,如果还保持低电平,说明是0;如果把电平拉高,说明是1;接着把电平拉低再拉高100微秒,表示一位发送完毕。如此反复 8 次,一个字节就搞定了。

五、写系统镜像

这个教程就很多了。

不过,老周补充一些内容。

1、SD卡其实不用格式化的,实际测试没任何问题。在写系统镜像前,可以用 Windows 自带的“磁盘管理工具”把 SD 卡的分区(或卷)删除,打开 Win32DiskImager 后直接选 SD 那盘就行了,这个软件它能自动识别出可移动设备,你的硬盘分区不会出现在选择列表中。

2、设置固定 IP,这个主要是指用网线和电脑连接时用。你不设置固定IP的话,每次启动树莓派的IP地址都不同,那连接起来就很蛋痒。网上有许多教程,你跟着教程改 .conf 文件就好。不过,老周介绍一种特简单的方法,下面说明一下。

当你成功写入系统镜像后,你会看到有两个分区,如下图所示。

 比如我这里,一个卷标为 boot 的F区,一个是G区。这个G区是 Windows 不能识别的文件系统,每次连接时,Windows 都会提示你格式化,你千万千万不要格式化,你忽略提示就行。

打开 boot 分区,里面有很多玩具,其中有两个玩具是.txt 文件,可以直接打开。最好用 NotePad++ 之类的工具来编辑。主要是因为 Windows 的换行符是带回车符的,Linux 下不使用。

config.txt 是用来配置树莓派开启哪些设置/功能的,比如启用 i2c,启用 1-Wire(双向单总线)等。这个文件你可以不改,在登录系统后可以通过系统命令修改——raspi-config。有的教程会告诉你关掉蓝牙,因为主控的串口模块分给了蓝牙,而TX、RX引脚用的是微控制器中的芯片(次要),因此要调过来。这个其实影响不是很大,除非你有更严格的效率要求。当然,不一定要关闭蓝牙的,你可以在 config.txt 文件中加上这一行,这样既可以把两个串口控制器调换,也不必禁用蓝牙。

dtoverlay=miniuart-bt, krnbt=on

这些配置的详细说明在 /boot/overlays/README 文件里面,你闲着的时候可以去瞄几眼。

下面重点来了,另一个文本文件是 cmdline.txt,它用来存一些命令,这些命令在系统启动时会执行,每个命令用空格分隔。打开 cmdline.txt 文件,在文件的最前面加上 ip=192.168.11.25,等号后面的就是你要用的静态IP地址,具体什么地址你自己决定。

ip=192.168.11.25 console=serial0,115200 console=tty1 root=PARTUUID=2e9f1d8c-02 ……

这个是不是比修改 .conf 文件简单?而且设置的还是全局的IP地址。

最后,你记得在 boot 分区的根目录下建一个空白文件,什么文件类型都无所谓,反正是空的,文件名为 SSH,无扩展名,这样当系统初始化后就会启用SSH功能,你才能在无显示器无键盘无鼠标的情况下通过一根网线登录树莓派。

Windows 10 自带有 ssh 工具,你不用到处找工具。打开命令行提示符窗口,输入:

其中,pi 是用户名,这是系统默认的用户名,默认密码是 raspberry。登入系统后改不改密码也无所谓,反正都是你自己用。如果你拿到外面用,或者别人有可能访问到你的树莓派,那就要改密码了,干脆连用户名、主机名也改掉。

Win 10 上如果第一次连某台 Linux 主机,会问你一串XX,你看不懂这串XX不要紧,输入 yes,然后回车就是了;如果发生错误,那就到 C:\Users\<你的用户名>\.ssh 目录下,把里面的 known_hosts 文件灭了(里面放的是与主机绑定的密钥)。接着重新 ssh 连接就好了。

六、购买模块/传感器

如果你买树莓派只是为了当 Web 服务器或者学习 Linux 系统,那不必花钱去买各种电子模块。可是,老周觉得,买块开发板来学Linux,是不是有点太过分了,这边建议你挂闲鱼上打三折给我吧。既然是开发板,当然得玩玩硬件了,不然你对不起这几百块大洋(我买的2G内存 268 元,4G/8G更贵)。

至于买哪些模块,哪些传感器,那就你自己喜欢了。

1、控制按钮类。可以买轻触开关、触摸开关、热敏开关、光敏开关、声控开关等;

2、传感器类。如 MPU 6050(三轴加速计,陀螺仪,这个有点复杂)、PAJ7620(手势感应)、DHT11(温度/湿度检测,这个简单一些)、DS18B20(温度检测,1-wire协议,这个在树莓派中可以直接以文件方式访问,用起来也简单)。很多传感器都使用了 IIC 协议(i2c),不过你不必自己去模拟,.NET有相关的 Nuget 包。

3、电机。舵机比较好玩,它可以控制旋转的角度,你可以用来做机械手。

4、发光二极管,LED小灯。记得顺便买200 - 250 Ω 的电阻,这个范围的阻值已经够了。老周做过实验,发光二极管在电流达到 18mA 时基本全亮。树莓派输出的电流最大 50 mA(说明书上是这样说的),单个引脚的输出电流应该没这么高。所以,如果你胆子大的话,你可以在接 LED 小灯时不串联电阻,直接裸奔多爽。其实二极管烧不了的,老周用 80mA 的电流点了一晚上都没烧。为了验证网上的说法,老周特意烧了两个灯,一个白的,一个红的。

白灯在电流增到 280 mA 后才烧的,红灯在 250 mA 左右就炸了。电流增到 190 mA 的时候,灯会闪,而且迅速发热,还会发出 Zi zi zi 的美妙声响。这么算下来。串联 200 欧姆的电阻或者裸奔完全没问题。

GPIO 引脚高电平(电压)一般是 3.3 V,二极管工作在 2 到 2.2 V间,电流 18 - 23 mA 之间(估计的,不同颜色的灯电流不一样)。我们姑且当电流是 20 mA,算一下

( 3.3 - 2.0 ) / 0.02

算得结果是 65 Ω,所以说 200 Ω 足够安全了。

5、超声波测距模块(比如HC-SR04模块)。想做玩具车的话,这个好用,比激光测距的好。根据老周自己做的实验,超声波能测到 5 米远,2-4 米范围应该准确一点。这个只是实验数据,没有代表性,你自己也可以试试,看能测多远。

上面只是列了几个,这些模块很多,没办法全列出来。

买这些模块的时候,老周建议不要一次性全买,可以分开买,或几个几个地买,这样做虽然收快递麻烦,但相对划算,哪家便宜买哪家。不过呢,常用的快递也就那几个“通”,如果多个快递同时到,可以一起收。有时候,同样的模块,有的店卖得特贵,如果你一大堆一起买,显然有些模块你会买贵了的。

七、树莓派的引脚

虽说有 40 个脚,但你能用的 28 个。关于这引脚次序怎么数,你可不要数反了,数反了容易接错,弄不好会烧电路。把引脚面向你,开发板的USB口向下,从左到右从上到下地数。看看这张图。

367389-20210113175009032-436922756.png

 或者看这张。

367389-20210113175340890-256635895.png

树莓派数据手册可以从这里下载:用力点击

你数数看,两个3.3V,两个5V,八个 GND(电源负),这里就占了 12 个脚了,能用于数据 IO 的引脚就剩 28 个,包括专用的串口通信,IIC,SPI这几类专门用途的引脚。标注 GPIO XX 的一般可以随你用。当然了,通过修改引脚重用配置也可以稍稍扩展几个口。

引脚重用(或者叫复用)是用一个叫 ALT 的数值来表示的,数据手册上都有。或者,你还可以看这个:https://pinout.xyz/,这上面对每个引脚的功能都有介绍。

举个例子,GPIO 12,在板子上是第 32 号引脚(右排从下往上,倒数第5个,在GND上方)。

 我们看到,它的 ALT 0 属性是 PWM0,即第一路 PWM 输出(实际上只有两路,虽然有四个PWM引脚,两个PWM0是相通的,两个PWM1也是相通的,相通的引脚输出参数相同;另外两个是 GPIO 18 和 19,但要手动修改ALT)。表示 12 号GPIO默认作为PWM输出(前提是要开启这个功能,都在 config.txt 文件中修改),如果把 12 脚的 ALT改成 ALT1,那它的功能就是SD4(用来通过引脚读写SD卡,这个不知道怎么用)。

==================================================

好了,暂时就介绍这么多。这些烂文老周都是每天写一点,然后拼出来的,有时候一篇要写一星期。没有足够的时间一口气写完,只能这样做。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK