树莓派开发

目录

树莓派刷机

刷机软件准备

修改树莓派配置文件

树莓派串口启动

配置Mobxtern

树莓派网络配置和连接网络

1.网络配置

树莓派ssh远程登陆

树莓派连接网络以及固定ip

打开 SSH 连接的方法

树莓派换源

树莓派安装wiringPi库

树莓派串口通信

将硬件串口释放:

树莓派上编译运行

​编辑

虚拟机安装交叉编译环

境搭建

交叉编译工具链安装

带wirinPi库的交叉编译


树莓派刷机

刷机软件准备

下载 Raspberry Pi Imager(比较省事,不用下载 SD Card Formatter、Win32DiskImager)

Raspberry Pi Image下载网址: Raspberry Pi OS – Raspberry Pi

树莓派官网下载合适的镜像 Operating system images – Raspberry Pi

准备刷机工具:下载 SD Card Formatter、Win32DiskImager

Win32 Disk Imager 下载链接:Win32 Disk Imager - Download Official Site

SD Card Formatter,下载链接:Download SD Card Formatter for Windows and Mac

格式化SD卡

烧录镜像到SD卡

修改树莓派配置文件

  1. 找到文本文件config.txt,双击打开,把下面的代码输入在文本的最后一行,dtoverlay=pi3-miniuart-bt 是 Raspberry Pi 的 Device Tree 参数,用于配置 Raspberry Pi 3 的串口功能。默认情况下,Raspberry Pi 3 的主串口(ttyAMA0)与蓝牙模块共享引脚,导致无法同时使用串口和蓝牙功能。

通过添加 dtoverlay=pi3-miniuart-bt 到 /boot/config.txt 文件中,可以将蓝牙模块从主串口移动到另一个串口(ttyS0),以便同时使用串口和蓝牙功能。这样一来,你可以在 Raspberry Pi 上连接外部设备并与其进行串口通信,而蓝牙功能仍然可用。

请注意,在使用 dtoverlay=pi3-miniuart-bt 后,你需要相应地更改串口设置,例如在配置文件或代码中将串口从 ttyAMA0 更改为 ttyS0。

dtoverlay=pi3-miniuart-bt//作用接触蓝牙对硬件串口ttysAMA0的占用

        2.接着找到文本文件cmdline.txt,复制一个到本地保存备用,然后打开 TF 卡里的文本文件,删除里面全部内容,替换成下面的代码,目的是为了让串口 1 作为远程终端的接口,并且设置了波特率为 115200 bps。

dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

这里边普及一下树莓派3系列有两个串口分别是 seria1 和serial0,

默认情况下串口的映射关系是

/dev/serial0 -> ttyS0
/dev/serial1 -> ttyAMA0

在config.txt 文件最后添加 dtoverlay=pi3-miniuart-bt //作用接触蓝牙对硬件串口ttysAMA0的占用,随后映射关系发生对调

/dev/serial0 -> ttyAMA0(硬件)(gpio14 gpio15)

/dev/serial1 -> ttyS0

console=tty1 //tty1是显示设备

console=serial0,115200 serial0 是串口ttyAMAA0

        3.然后在根目录下新建一个文件,命名为userconf.txt,在userconf.txt输入如下内容:

pi:$6$/4.VdYgDm7RJ0qM1$FwXCeQgDKkqrOU3RIRuDSKpauAbBvP11msq9X58c8Que2l1Dwq3vdJMgiZlQSbEXGaY5esVHGBNbCxKLVNqZW1

加上这个文件的目的是为了能正常登录树莓派,2022 年 4 月之前的版本都是自带userconf.txt这个文本文件的,可以正常用默认账户和密码登录树莓派。但是在2022 年 4 月之后的版本,官方把这个文件移除(据说是为了安全),如果不加这个文件,只能通过外接 HDMI 的显示器来创建账户来登录树莓派,或者使用树莓派官方的镜像烧录工具,也就是 Raspberry Pi Imager,在烧录镜像前先设置好账户和密码,以及配置好 WiFi 和 SSH 服务器,当系统烧录之后,直接用 SSH 访问树莓派,用设置好的账户和密码登录也能正常使用。

上面那段代码,其实就设置 username 为 pi,password 为 raspberry,那一长串 hash 就是 raspberry。

树莓派串口启动

  1. 配置Mobxtern

2.然后找个USB-TTL 与树莓派相连,然后USB口插到电脑上,电脑上要装CH340驱动

3.启动 username 为 pi,password 为 raspberry

树莓派网络配置和连接网络

1.网络配置

由于树莓派系统并没有 vim 编辑器,所以只能用 nano 编辑器来配置网络,之后有网络后再安装 vim 编辑器。

在终端输入下面的命令:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

按方向键把光标移到空白行,输入下列内容:

country=CN 
network={ ssid="your_wifi_name" 
          psk="your_wifi_password" 
}

"country=CN"的作用是把无线网连接区域设置为中国地区。

把 ssid 后面双引号的内容改成路由器的名称,也就是 WiFi 名,要注意的是,WiFi 名只能是 ASCII 码,也就是说 WiFi 名只能用英文和阿拉伯数字,还有一些英文符号组成,不能有中文。如果家里的 WiFi 名带有中文或者其他语言的字符,可能无法输入或者输入后无法连接,建议先修改路由器名称,再执行此操作。

psk 这是 WiFi 的密码,把 psk 后面双引号的内容改成 WiFi 密码即可。

下图是我的树莓派的修改。

输入完毕后,按组合键 CTRL + o 之后,会提示是否保存文件,可以不管直接按回车,再按组合键 CTRL + x 退出 nano 编辑器。

然后输入 sudo reboot 重启树莓派,树莓派重启登录后,再次输入 ifconfig 就可以看到成功连上 WiFi,并获得 IP 地址了。

可以看到多出了一个 wlan0,这个就是连接上 WiFi 才有的无线局域网接口,当前的无线局域网的 IP 地址是 192.168.31.173。

顺带提一嘴夹在 eth0 和 wlan0 中间的 lo,这是本地回环接口(Local Loopback),一般用于本机内部通信,并不真实地从外界接收和发送数据包。

2.初次 WiFi 连接失败的处理方法

如果在设置 WiFi 连接,重启登录后,查看网络连接情况,出现入下图所示的情况,也就是发现没有出现 wlan 的连接信息,就说明 WiFi 连接失败了。在登录成功之后,会打印一些 WiFi 连接失败的报错信息。

一般在/etc/wpa_supplicant/wpa_supplicant.conf这个文件中加入这句 country=CN都不会出现这个问题。

当然了,报错的同时还贴心地告诉我们怎么去处理,提示我们用 raspi-config 命令进入树莓派的设置界面做一些设置。

终端命令输入:

sudo raspi-config

进入树莓派系统设置界面,选择第五个选项“Localisation Options”,回车。

该选项是用于本地化选项配置语言和区域设置,要把里面的地区改成中国。

然后选择第四个选项“WLAN Country”,回车。

该选项用于设置中国地区为合法的无线信道的 WLAN 国家或地区。

在下面的界面按方向键找到“China”,并回车选中。

再按一次回车表示确定,就会回到最开始的系统设置界面。

按 TAB 键把光标移到Finish上,回车完成设置并退出界面。

这时候再输入 ifconfig 回车,就可以看到 WiFi 成功连上了。

如果失败了尝试手动连接下

nmcli dev wifi connect//显示周边wifi

报错:NetworkManager is not running

1.检查NetworkManager服务的状态:运行以下命令来检查NetworkManager服务的状态:

systemctl status NetworkManager

如果服务当前处于停止状态,你可以继续下一步来启动它。

2.启动NetworkManager服务:运行以下命令来启动NetworkManager服务:

sudo systemctl start NetworkManager

这将启动NetworkManager服务并使其处于运行状态。

3.检查NetworkManager服务的启动状态:再次运行以下命令来检查NetworkManager服务是否已经成功启动:

systemctl status NetworkManager

如果服务显示为运行中,则表示NetworkManager已经成功启动。

4.确保NetworkManager服务开机自启动:运行以下命令以确保NetworkManager服务在系统启动时自动启动:

sudo systemctl enable NetworkManager

再次执行:nmcli dev wifi

连接网络指令

sudo nmcli dev wifi connect [wifi_name] password [ secret]

树莓派ssh远程登陆

树莓派连接网络以及固定ip

sudo vi /etc/rc.loacal 
在最后添加 ifconfig wlan0 [your IP]

树莓派SSH服务默认是关闭的要自己打开

打开 SSH 连接的方法

1.根目录下新建 SSH 文件

这种办法最简单,关闭树莓派,取出 TF 卡,装上读卡器后插入电脑,打开 TF 卡的盘符,在根目录下新建一个名为ssh的文件,方法和前面新建userconf.txt一样,只不过ssh文件不需要输入任何内容,也不需要.txt的扩展名。

建好文件之后,把 TF 卡插入树莓派,上电启动就可以打开 SSH 了

2.系统设置界面开启 SSH

和前面处理 WiFi 连接失败问题一样,

输入命令:

sudo raspi-config 

进入树莓派系统设置。

选择第三个选项“Interface Options”,回车。

该选项是用于配置与外围设备的连接。

进入到接口选项,选择第二项“SSH”,回车。

接着会提示是否开启 SSH 服务器,按方向键选择Yes回车。

SSH 已经开启,再次按回车回到系统设置界面

最后按 TAB 键选择Finish回车退出即可。

3.命令行开启 SSH

在终端命令行输入:

sudo systemctl enable ssh sudo systemctl start ssh

即可开启 SSH 服务器。

设置 SSH 登录树莓派

同样以 MobaXterm 为例,单击左上的图标Session。

在弹窗中单击SSH选项,然后在SSH的设置界面的Remote host中输入树莓派的 IP 地址,我这里输入的是 eth0 的 IP 地址,也可以输入 wlan0 的 IP 地址,操作都是一样的。然后在Specify username前的复选框打上勾,并在后面输入账户名,也就是 pi。然后单击下面的OK按钮,完成设置。

MobaXterm 会跳转到新建的选项卡窗口,如下图所示,输入登录的密码,再按回车。

成功通过 SSH 服务器登录树莓派。

树莓派换源

查看子自己的版本:

获取源:raspbian | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

我的是Raspberry版本 11 代号Bullseye,

备份原有的sources.list源:cp /etc/apt/sources.list sources.list_bak

备份原有的raspi.list源:cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list_bak /etc/apt/sources.list sources

最后更新下:

sudo apt-get update

树莓派内存扩展

我们在更新源的时候可能会报错:No space left on device

解决方法:

sudo raspi-config

然乎重启一下,用df -h指令查看下

树莓派安装wiringPi库

下载链接:https://project-downloads.drogon.net/wiringpi-latest.deb

安装:

sudo dpkg -i wiringpi-latest.deb
gpio -v

gpio readall

树莓派串口通信

将硬件串口释放:

测试代码:

#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>

int main()
{
	char buf[64] = {0};
	int n_read;
	wiringPiSetup();

	int fd =serialOpen("/dev/ttyAMA0",115200); //打开串口
	if(fd == -1){	//如果打开串口失败则退出程序
		printf("serialOpen failed!\n");
		return 0;
	}

	if(fork() == 0){
		while(1){
			memset(buf,0,sizeof(buf));
			n_read = read(fd,buf,sizeof(buf));  //子进程一直等待数据接收
			if(n_read > 0){
				printf("data %dB:%s\n",n_read,buf); 
			}else{
				perror("read failed"); //读取失败,打印错误信息
				delay(1000);
			}
		}
	}else{
		while(1){
			serialPrintf(fd,"hello world!!\n"); //父进程每隔三秒发送一次hello world!!
			delay(3000);
		}
	}

	return 0;
}


树莓派上编译运行

另外借助串口助手实现双方通信

树莓派一次最多只能读8个Byte,要想读取更多的话等我学会了再说

虚拟机安装交叉编译环

境搭建

交叉编译工具链安装

1.获取交叉编译工具:GitHub - raspberrypi/tools //需要VPN

2.把下载的压缩包拷贝到Ubuntu里面,然后解压

unzip tools-master.zip

3.添加环境变量:在 .bashrc最后加入 ,交叉编译链所在目录:

pwd 
/home/lh/raspberry/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
sudo vi .bashrc
export PATH=$echo:/home/lh/raspberry/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin 

4.测试:

arm-linux-gnueabihf-gcc -v //

带wirinPi库的交叉编译

1.将wiringPi.h 和wiringPi.so.2.50从树莓派拷贝过来(因为我没找到64位的x86架构的wiringPi库,按照道理来说应该是要对下x86架构的wringPi库进行交叉编译成am架构的,我这里便就直接拷贝树莓派的的wiringPi.so了),

从树莓派上copy 测试文件和wiringPi库以及wiringPi.h 
scp pi@172.20.10.2:/lib/libwiringPi.so.2.50 [虚拟机路径] 
scp pi@172.20.10.2:/home/pi/hc04.c [虚拟机路径] 
scp pi@172.20.10.2:/usr/include /wiringPi.h [虚拟机路径]

2.交叉编译前所有要准备的文件,

3.开始交叉编译,将hc04.c编译成可以运行在arm架构上的可执行程序

4.发送hc04可执行文件给树莓派,并在树莓派上执行

scp hc04 pi@172.20.10.2:/home/pi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值