树莓派已经完全脱离了一般的嵌入式单片机体系了,它对于嵌入式软件开发已经走在了一个非常高的高度了。用树莓派做嵌入式开发的好处在于你不需要关心硬件层面的东西,只要按照引脚接好,然后调用特定的函数就可以使用了。。。

Tips:本文用到的工具都可以在文章末尾的压缩包中找到。

前言

我把嵌入式开发分成硬件开发以及软件开发,STM32属于完全型的,既要懂得硬件原理,会操作寄存器,会通过使能特定的信号来实现对硬件不同状态的控制。也要能够对算法逻辑非常的清晰,中断处理,算法程序设计等等,还有各种稀奇古怪的知识,比如volatile,这个关键字基本上不会在软件开发中用到,但是在STM32中经常被提及,因为STM32的中断啥的特别多。

树莓派和Ardunio是可以属于那种纯粹的上层软件开发,你可以只关心代码怎么写,而不需要考虑我该怎么驱动他。当然,如果你找不到对应的库文件,你还是需要自己去驱动硬件的,就像小学期的一个超声波模块一样,死活找不到合适的树莓派的超声波模块,只能自己动手写一个驱动程序了。

还有一个是树莓派使用的语言是C或者Python,Python用的比较多,所以要学树莓派还需要一点Python基础。https://www.luodeb.top/tags/Python/

树莓派里面运行了一个Linux操作系统,通过Linux系统来对不同的外部硬件进行控制,并且可以轻松实现多线程管理,中断使用的就少了,所以在树莓派的开发中,还是需要一点Linux的知识的,但是这里我并不想写,如果有兴趣的,可以去网上找一点。

树莓派的硬件结构

请你务必牢记下面这张图,并且保存到你可以找得到的地方。
树莓派引脚图-2020-06-21

树莓派的针脚有 WiringPI BCM BOARD三种编码格式,GPIO.0和GPIO.1没有外部中断功能。我们平时使用的比较多的是BCM编码格式的。

然后因为树莓派的性能很高,支持直接对代码进行编译加运行,所以我们可以实时看到我们写出来的代码运行结果,而不需要频繁的对单片机进行复位,那么在使用了一个针脚之后,加入我定义针脚为OUTPUT,那么这个时候,我将程序通过操作系统强制关闭之后,这个针脚依然没有被释放,下一次我将针脚定义为INPUT的时候,就会报错,所以在使用的过程需要GPIO.cleanup()

安装操作系统

在拿到一个新的树莓派之后,需要安装一个Linux系统,一般推荐安装RaspbianOS,基于Debian的一个官方系统。

准备工作

  • 树莓派
  • SD卡(8G及以上)
  • 读卡器
  • 树莓派电源

下载系统

去官网下载一个最新的Raspbian系统,下第一个带桌面的版本。
<https://www.raspberrypi.org/downloads/raspberry-pi-os
20200621093944-2020-06-21

安装系统

将SD卡用内存卡格式化工具格式化,然后用写入工具将下载解压的.iso系统文件写入SD卡中就可以了。

写入完成之后不要急着拔掉内存卡,因为我们没有屏幕的话,需要用SSH连接树莓派,所以需要先打开树莓派的SSH功能,在sd卡根目录新建一个文本文档,然后重命名为ssh,记得把.txt后缀也删掉。(大部分同学的电脑都是自动隐藏后缀名的,需要勾一下)
20200621094628-2020-06-21

连接树莓派

通过wifi或者网线连接

我最常使用的方法就是让树莓派连接我的的热点,然后再扫描IP地址,或连接寝室wifi,然后扫描路由器或者后台查看。

这个方法总结就是两点

  • 让树莓派接入局域网
  • 获得树莓派的IP地址

如何让树莓派乖乖连接wifi?
配置一个文件wpa_supplicant.conf,我会把文件放在最后,或者自己打字也行。
20200621100530-2020-06-21
把ssid改成wifi名字,注意不支持中文,你得把你的wifi改成全英文名字的。树莓派不能连接中文名wifi。
把psk改成你的wifi密码。
priority是指优先级,你可以写好几个wifi的network类,数字越小优先级越高。

然后把文件放在根目录下,就可以拔掉内存卡了,开机之后,这个文件会消失,属于正常现象。

然后过一会儿树莓派开机就可以从后台看到是否有一个叫做RaspBerry的设备接入wifi。

当然,直接插网线,直接开机,直接上网,百分百靠谱。

通过UART有线连接

这个方法比较,,,,合理。但是我没有试过,就是通过一个USBtoTTL,把TXD接在树莓派的RXD,RXD接在树莓派的TXD上,然后打开Putty中选择串口,115200,点击连接就可以连接树莓派了。但是这个方法怪问题很多,用的也不多,如果你可以稳定连接,那也行,百度上教程很多,可以看看。知道有这个方法就行。

屏幕+键盘鼠标

有钱人的玩法。

登录树莓派

当你获得了树莓派的IP地址之后,你就可以登录树莓派了。

获得的方式很多,比如接入同一个wifi,然后使用局域网扫描工具,或者在路由器后台查看。
一般是使用SSH登录,这里用的SSH工具实Putty,电脑和树莓派接入同一个网络,然后打开Putty,输入树莓派的ip,端口22,点击打开,确认就行了。

Linux相关

这里还是有必要普及一点点Linux相关的知识,在Linux中,有一个理念贯穿整个系统,叫做一切皆文件,无论是命令还是设备,或者是目录,都是文件,后面我会写一篇文章专门讲一下Linux相关的东西。Linux常用命令大全

这里你只需要知道下面几点:

运行Python文件

比如我写了一个led.py,那么运行命令就是python3 led.py
安装软件是用apt-get,一般会加上sudo使用管理员运行,例如sudo apt-get insatll python

文件权限

在Linux中的文件都是有一个权限表示的,4表示读,2表示写,1表示执行,第一位表示所有者权限,第二位表示访客权限,第三位表示其他人权限,7表示拥有完全权限。所以有时候遇到文件无法访问,就需要改变权限例如sudo chmod 777 test.txt,或者使用sudo管理员来执行。

点灯

连接

把led等像这样连接
20200621102537-2020-06-21

可以不用电阻,树莓派内部电压不高,当然,有电阻最好。

代码

首先新建一个led.py文件,我一般会用nano来写,因为对新手比较友好,但是建议用vim,功能丰富,并且显得专业。安装vim使用sudo apt-get install vim命令。

使用命令nano led.py新建文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import RPi.GPIO as GPIO #导入GPIO模块
import time #导入time模块
GPIO.setwarnings(False) #取消警告
GPIO.setmode(GPIO.BCM) #声明针脚编码
GPIO.setup(17,GPIO.OUT) #声明17脚为输出脚
try:
while 1
GPIO.output(17,GPIO.HIGH) #17脚设置为高电平
time.sleep(0.5#休眠0.5秒
GPIO.output(17,GPIO.LOW) #17脚设置为低电平
time.sleep(0.5#休眠0.5秒
finally
print("clean up all GPIO..."
GPIO.cleanup() #清空GPIO定义

记住这个try和finally结构,他可以在你强行关闭程序的时候,运行GPIO.cleanup(),建议你这样做。

可以复制,鼠标右键粘贴。

运行

写完之后,按ctrl o保存,ctrl x退出。
然后在命令框输入python3 led.py运行你的代码。
20200621103515-2020-06-21

按键盘上的ctrl c退出程序,记住Linux里面复制和粘贴都是通过鼠标右键控制,ctrl c是close的意思,不是copy。

结尾

这里把我整理的工具包放在这:点击下载

树莓派加python可以实现非常多的骚操作,比如连接百度云AI,可以实现语音识别,图像识别,还可以用Python搭建网页等等,这些都是STM32远远比不上的,等待大家的脑洞和创意。

如果有不懂得,随时联系。