树莓派外设库及链接制作使用

693 阅读3分钟

4月「掘金·日新计划」第17天

一、外设使用WiringPi

有人提供的树莓派库,我怀疑是基于gpiolib,驱动会说什么是gpiolib

  1. 查看是否安装,gpio -v

  2. 头文件及使用编译

    #include <wiringPi.h>
    -lwiringPi
    
  3. 硬件初始化

    int wiringPiSetup(void);
    
  4. 引脚配置

    void pinMode(int pin,int mode);
    //pin引脚,gpio readall出来的表,wPi列的序号
    //模式,可取INPUT,OUTPUT,PWM_OUTPUT,GPIO_CLOCK
    
  5. 控制引脚输出

    void digitalWrite(int pin, int value);
    //pin引脚
    //LOW低电平,HIGH高电平
    
  6. 读取输入电平

    int digitalRead(int pin);
    
  7. 输出模拟量(树莓派不支持AD转换,要加模块)

    void analogWrite(int pin,int value)
    //pin
    //模拟量
    
  8. 输入模拟量(树莓派不支持AD转换,要加模块)

    int analogRead(int pin)
    
  9. pwm

    1. 硬件输出pwm,只能1脚

      void pwmWrite(int pin,int value)
      //pin
      //写入到PWM寄存器的值,0-1024
      
    2. 软件实现pwm函数

      #include<softPwm.h>    -lpthread
      int softPwmCreate(int pin,int initialValue,int pwmRange)
      //使用一个指定pin引脚,创建一个模拟的PWM输出引脚
      //pin,引脚输出的初始值,PWM值范围上限建议100
      void softPwmWrite(int pin,int value)
      //更新引脚PWM值
      //pin,PWM引脚输出值
      
  10. 拉电阻模式

    void pullUpDnControl(int pin,int pud)
    //pin
    //PUD_OFF关闭拉电阻,PUD_DOWN下拉,PUD_UP上拉
    
  11. 时间控制函数

    1. 硬件初始化开始,程序执行到现在的毫秒级数

      unsigned int millis(void)//毫秒最大可记录49天
      unsigned int micros(void)//微妙最大记录71分钟
      
    2. 延时函数

      void delay(unsigned int howLong)//毫秒
      void delayMicroseconds(unsigned int howLong)//微妙
      
  12. 串口通信

    1. 使用前准备

      包含头文件#include <wiringSerial.h>
      用之前要改树莓派的启动文件cmdline.txt,把默认串口用作打印启动终端删掉
      打开文件sudo vi /boot/cmdline.txt
      删掉console=seria10,115200
      
    2. 打开并初始化串口

      int serialOpen(char *device, int baud)
      //成功文件描述符,-1失败
      //串口地址,设备目录,/dev/ttyAMA0
      //参数2:波特率
      
    3. 关闭串口

      void serialClose(int fd)
      //文件描述符,关闭的串口
      
    4. 发送一个字节数据,一个字符

      void serialPutchar(int fd, unsigned char c)
      //fd,发送的字符
      
    5. 发送字符串

      void serialPuts(int fd,char*s)
      
    6. 发送格式化数据,printf

      void serialPrintf(int fd,char *message,...)
      
    7. 获取串口缓冲区字节数

      int serialDataAvail(int fd)
      //缓冲区字节数,可读取的字节数,-1错误
      
    8. 读取一个字节数据

      int serialGetchar(int fd)
      
    9. 清空缓冲区所有数据

      void serialFlush(int fd)
      
    10. Linux标准IO库函数,头文件#include<unistd.h>

      *size_t write(int fd,const void*buf,size_t count)
      *size_t read(int fd,void *buf,size_t count)
      

3.1、超声波

  1. 引脚

    1. VCC(5v、15mA)
    2. Trig(触发)
    3. Echo(接收)
    4. GND
  2. 工作原理

    1. T发送,R接收
    2. Trig发送10us方波,Echo接收,计算时间

二、交叉编译工具链安装

  1. 下载树莓派工具链

  2. 解压文件(解压完成就代表完成安装)

    命令:unzip tools-master.zip(压缩包文件名)

  3. 查看版本号

    输入命令:./arm-linux-gnueabihf-gcc -v

  4. 配置环境变量

    1. 临时

      1. 显示echo PATH
      2. 添加 export PATH=环境变量到games: 或者 $PATH 加上pwd出来的路径
    2. 永久

      1. 修改工作目录下的.bashrc 隐藏文件,配置命令终端的

      2. 添加 export PATH=

      3. source .bashrc 生效配置

        1. source 立即加载执行脚本文件里面的指令
        2. 终端程序启动脚本文件:~/.bashrc,在执行终端的时候都会执行该脚本,完成环境变量的配置工作

6.1、带WiringPi库的交叉笔译

  1. 把树莓派的库拿到虚拟机

    /usr/lib/libwiringPi.so.2.50    //动态库,不用拿软连接
    /usr/include/位置wiringPi.h                     //头文件
    
  2. 编译

    arm-linux-guneabihf-gcc 文件名 -I 头文件位置 -L 动态库位置 -lwiringPi -o 生成的文件
    
  3. 制作了脚本a.sh

    1. gcc 文件名 -o 文件名
    2. 位置在/home/xw/pi/smp

三、软硬软件制作

  1. 软链接

    ln -s libwiringPi.so.2.50 libwiringPi.so
    命令 参数 被链接的文件 软连接的文件名
    
  2. 硬链接

    ln libwiringPi.so.2.50 libwiringPi.so
    没有参数-s