树莓派学习

树莓派刷机

1.下载镜像树莓派的镜像
2.下载SDFormatter
若你的SD卡是使用过的,建议需进行格式化(使用 SDFormatter),然后再使用。
3.安装Win32 Disk Imager
在这里插入图片描述
可选择1.0的版本,有显示镜像安装需多少时间。选择write,进行写入,时间显示5-10分钟,说明你的镜像文件是好的,若显示是四五十分钟说明你的文件是损坏的,需重新下载。

树莓派登录

2.1 HDMI视频线 连接到显示器
2.2 串口

2.2.1设备破解
默认情况,树莓派的串口和蓝牙连接。
想办法断开蓝牙连接,把串口用来数据通信
参考文章:https://blog.csdn.net/syjsxxjy/article/details/80774262
主要修改下面两处地方:
在这里插入图片描述
2.3
默认账号:pi
默认密码:raspberry

2.4 通过网络登录树莓派(ssh)
参考文章:https://blog.csdn.net/qq_36760780/article/details/82016711
2.4.1.sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Nano是文档编辑器,已进入便可以编写。
Ctrl+o 保存,会有提示是否写入。我们按回车。Ctrl+x退出

2.4.2.添加下面代码,ssid为wifi名称,psk为密码

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
network={
        ssid="wifipig"
        psk="123456789"
}

2.4.3.固定树莓派的ip地址
1.sudo nano /etc/rc.local
2.添加ifconfig wlan0 固定的IP
在这里插入图片描述
3.树莓派打开ssh功能
sudo raspi-config
4.用终端工具登陆树莓派(推荐Xshell)

2.5图形方式登录树莓派
sudo apt get install xrdp
windows用“远程桌面连接”自带软件登录

树莓派换源

因为树莓派默认的源是国外的,使用apt-get 安装会失败,我们换成国内的源
参考文章:https://blog.csdn.net/Liu_959185/article/details/86636906
1.编辑sources.list

sudo nano /etc/apt/sources.list

用#注释或直接删除原有的内容(也可以自己换其他的源),新增两条:

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
#deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

ctrl+x 保存并退出。
2. sudo apt-get update更新源

树莓派Wiringpi库

参考文章:https://www.cnblogs.com/lulipro/p/5992172.html
Wiringpi库API大全:http://t.csdn.cn/b9vhF
wiringPi是树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等
在使用wiringPi库时,需要包含头文件 #include<wiringPi.h>

查看版本: gpio -v(没有的话需要安装)
在这里插入图片描述

查看GPIO:gpio readall
在这里插入图片描述

硬件初始化函数:(选择一种函数初始化即可)

int wiringPiSetup (void) 返回:执行状态,-1表示失败

**当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0~16,需要root权限**
int wiringPiSetupGpio (void) 返回执行状态,-1表示失败

**当使用这个函数初始化树莓派引脚时,程序中使用的是BCM GPIO 引脚编号表。需要root权限**

使用wiringPi库编译要加-lwiringPi

树莓派超声波使用

在这里插入图片描述

超声波测距原理:是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
在这里插入图片描述

以上时序图表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40KHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此听过发射信号到的回响信号时间间隔可以计算得到距离。

  1. 公式:uS/58=厘米或者uS/148=英寸
  2. 距离=高电平时间*声速(340M/S)/2
  3. 建议测量周期为60 ms以上,以防止发射信号对回响信号的影响。 `
该结构体是Linux系统中定义,struct timeval结构体在time.h中的定义为
struct timeval
{
__time_t tv_sec;        /* Seconds. */
__suseconds_t tv_usec;  /* Microseconds. */
};
tv_sec为Epoch到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。比如当前我写博文时的tv_sec为1244770435,tv_usec为442388,即当前时间距Epoch时间1244770435秒,442388微秒。

超声波测距源代码

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>

#define Trig    4  //触发
#define Echo    5	//回应

void ultrasonic_wave_Init(void)
{
    pinMode(Echo, INPUT);//检测波什么时候发什么时候回来设置端口为输入
    pinMode(Trig, OUTPUT);//触发脉冲设置端口为输出
}

float disMeasure(void)//测距原理
{
    struct timeval tv1;
    struct timeval tv2;
    long start, stop;
    float dis;
	
    digitalWrite(Trig, LOW);//先让脉冲处于低平稳
    delayMicroseconds(2);

    digitalWrite(Trig, HIGH);//再拉高
    delayMicroseconds(10);      //发出超声波脉冲,脉冲在空气中传播1过程中,Echo会维持高电平,所以我们只需要Echo变上升沿的时间(start)和下降沿的时间(stop)即可
    digitalWrite(Trig, LOW);//拉低至平稳
    
    while ((digitalRead(Echo) != 1)); 	//Echo低电平啥也不做,变高电平时获取开始时间
    gettimeofday(&tv1, NULL);           //获取当前时间,开始接收到返回信号的时候

    while (!(digitalRead(Echo) == 0));	//当Echo高电平时啥也不做,变低电平时获取结束时间
    gettimeofday(&tv2, NULL);           //获取当前时间,最后接收到返回信号的时候
    start = tv1.tv_sec * 1000000 + tv1.tv_usec;   //微秒级的时间,开始发波的时间
    stop  = tv2.tv_sec * 1000000 + tv2.tv_usec;//波返回来的时间
    dis = (float)(stop - start) / 1000000 * 34000 / 2;  //计算时间差求出距离
    return dis;
}

int main(void)
{
    float dis;//用来存放测试的距离

    if (wiringPiSetup() == -1) { //硬件端口初始化
        printf("setup wiringPi failed !");
        return -1; 
    }

    ultrasonic_wave_Init();//调用超声波函数
    
    while (1) {//不断地测距
        dis = disMeasure();
        printf("distance = %0.2f cm\n", dis);
        delay(1000);
    }

    return 0;
}

树莓派串口通信与语言模块的使用

参考:https://www.cnblogs.com/lulipro/p/5992172.html
串口通信部分
在这里插入图片描述

注意:初次使用树莓派串口编程,需要配置

/* 修改 cmdline.txt文件 */
>cd /boot/
>sudo vim cmdline.txt


删除【】之间的部分
dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait


/*修改 inittab文件 */	这步没有这个文件就不需要做
>cd /etc/
>sudo vim inittab

注释掉最后一行内容:,在前面加上 # 号
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100


sudo reboot 重启

demo:简单的树莓派与PC的通信

#include <stdio.h>
#include <wiringSerial.h>
#include <stdlib.h>
int main()
{
	int cmd;
	int fd; //Linux 的思想是:将一切IO设备,都看做 文件,fd就是代表串口抽象出来的文件
    
    if((fd = serialOpen("/dev/ttyAMA0",9600))==-1)    //初始化串口,波特率9600
    {
        
		printf("open serial error\n");
        exit(-1);

    }
	
	serialPuts(fd,"hello\n");
	
	while(1){
		 if(serialDataAvail(fd) >= 1){    //如果串口缓存中有数据
			cmd = serialGetchar(fd);
			if(cmd == '1'){
				serialPuts(fd,"get 1\n");
				printf("111111\n");
			}
			if(cmd == '2'){
				serialPuts(fd,"get 2\n");
				printf("222222\n");
				
			}
			
		 }
	}
	
	
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值