精华内容
下载资源
问答
  • node-rpio, 用于 node.js的树莓派 GPIO库 节点 rpio兼容性树莓派 模型:A,B ( 修订 1.0和 2.0 ),A+,B+,2,3,0.Node.js 版本:0.8,0.10,0.12,4,5,6,7,8新版 node.js 要求你安装 GCC 4.8包以支持C+
  • 可以将任意GPIO都复用为PWM,但缺点是会增加CPU负担。 树莓派的软件PWM 软件PWM默认频率是100Hz,一般的pwm范围设置为100,太大会增加CPU开销。 int softPwmCreate (int pin, int initialValue, int pwmR.

    Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

    使用到的硬件:

    led,200Ω左右的电阻、杜邦线。

     

    上一节使用硬件PWM来控制led亮度,可树莓派的硬件PWM引脚只有1路,在实际应用中,1路PWM几乎干不了什么

    庆幸的是wiringPi库提供了一个软PWM功能。可以将任意GPIO都复用为PWM,但缺点是会增加CPU负担。

    树莓派的软件PWM

    软件PWM默认频率是100Hz,一般的pwm范围设置为100,所以一般的pwm分辨率为0.1ms,太大会增加CPU开销

    int softPwmCreate (int pin, int initialValue, int pwmRange) ;    // pin引脚,initialValue初始PWM值,pwmRange输出pwm范围

    用软件PWM,实现的呼吸灯:

    Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

    include <wiringPi.h>
    #include <softPwm.h>
    
    int spwmLed = 1;                        // 定义使用wiringPi编码的1引脚
    int main(void)
    {
        int xnum = 0;
        wiringPiSetup();                    // 使用wiring编码去初始化GPIO序号
        softPwmCreate (spwmLed, 0, 100);    // 设置wiringPi编码的1引脚为软件PWM输出
        while(1)
        {
            for(xnum = 0; xnum <= 100; xnum++)
            {
                softPwmWrite(spwmLed, xnum);
                delay(15);                  // 延时15ms
            }
            for(xnum = 99; xnum > 0; xnum--)
            {
                softPwmWrite(spwmLed, xnum);
                delay(15);                  // 延时15ms
            }
        }
        return 0;
    }

     

    应用要点

    由于软件PWM会很大程度上占用树莓派的CPU开销,挤压其他任务的调度。

    而且性能一般般,准确性查,几KHz以上的高频PWM几乎是输出不了的。

    所以建议应用电机控制的玩家,外挂一片单片机/PCA9685,使用总线通信方式去控制其他外设做PWM输出。

    展开全文
  • 挖坑计划:wiring GPIO输出 led、GPIO输入 按键、uart/serial终端,IIC MPU6050、SPI icm

    Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

    电脑需要提前安装的工具:

    SSH、串口 - 终端神器 MobaXterm,官网下载链接:https://mobaxterm.mobatek.net/download.html

    windows端 代码编辑工具: VScode、Source Insight、Sublime, 都是不错的选择。选其一安装即可。

    使用到的硬件:

    led,200Ω左右的电阻、杜邦线。

     

    在树莓派上控制GPIO,最简单的方式莫过于使用 wiringPi函数库了。

    wiringPi简介

    -- wiringPi是一个用c语言编写的GPIO函数库。起初只是作为芯片的GPIO库,而发展到今天,wiringPi提供了非常丰富的功能:GPIO、UART、I2C、SPI、PWM等,同时也提供了中断、多线程等操作,功能非常强大。

    -- wiringPi的函数类似于 Arduino,十分容易上手。使用c/c++进行开发,并且可以被其他语言转换,例如python。

     

    一、获取wiringPi

    终端输入 gpio -vgpio readall,来查看本机是否安装了 wiringpi.

    如果指令相应错误,则是没有安装。使用下面命令进行安装。

    sudo apt-get inatall wiringpi

     

    二、GPIO管脚编码

    wiringPi函数库的管脚编码,大致分为几种:1.wiringPi编码  2.BCM编码  3.物理引脚编码

    int wiringPiSetup (void) ;             //设置使用 wiringPi编码。

    int wiringPiSetupGpio (void) ;     // 设置使用 BCM编码。

    int wiringPiSetupPhys (void) ;     // 设置使用 物理引脚编码,不常用。

     

    三、硬件连接

    我们使用 wiringPi编码的 7脚,输出0/3.3V电平,来控制LED的亮灭。

    LED的压降为 2V左右,限制单个GPIO的输出电流在5mA左右,电阻的取值为 200~680Ω较为合适。

    led的阳极串联200Ω电阻,连接到树莓派wiringPi编码的7脚。(一定要区分wiringPi编码 、BCM编码 、和物理引脚编码

     

    四、编写c代码

    Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

    使用到的函数有

    函数语句 函数功能
    wiringPiSetup(); 使用wiring编码去初始化GPIO序号
    pinMode(int pin, int mode); 设置GPIO电气属性
    digitalWrite(int pin, int value); 设置一个数字引脚,输出指定电平
    delay(unsigned int howLong); 延时 xx ms
    #include <wiringPi.h>
    
    int led = 7;                    // 定义使用wiringPi编码的7引脚
    int main(void)
    {
        wiringPiSetup();            // 使用wiring编码去初始化GPIO序号
        pinMode(led, OUTPUT);       // 设置GPIO电气属性为推挽输出
        while(1)
        {
            digitalWrite(led, 1);   // led亮
            delay(500);             // 延时500ms
            digitalWrite(led, 0);   // led灭
            delay(500);             // 延时500ms
        }
        return 0;
    }

    通过MobaXterm,使用FTP,将led.c传输到树莓派文件夹内。

    如何使用 FTP,见准备篇https://blog.csdn.net/Mark_md/article/details/107113372

     

    五、编译运行

    使用下列指令编译。-o led表示指定生成文件的名字为led,-lwiringPi表示链接wiringPi库。

    gcc led.c -o led -lwiringPi

    使用如下命令运行

    ./led

    使用如下组合键,结束运行

    Ctrl + c

    展开全文
  • 串口用到的函数: 使用时需要添加 #include 函数语句 函数功能 int serialOpen (char *device, const int baud) 打开 *device设备地址的串口,波特率 baud void serialClose(int fd) 关闭 fd关联的串口 void ...

    Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

    使用树莓派的串口前,需要先了解树莓派板载的两个串口的区别:

    树莓派3为了增加蓝牙硬件,将独立时钟的硬件串口(/dev/ttyAMA0),默认分配给了蓝牙。

    与CPU共用时钟的硬件串口(/dev/ttyS0),默认分配给了15、16。

    而树莓派的CPU时钟不像单片机一般是固定的,而是根据负载来动态调整的,这就会导致有些问题:当CPU频率切换时,可能会造成串口有乱码现象。说人话就是 /dev/ttyAMA0更加稳定。

     

    本节先讲 /dev/ttyS0 串口的用法,适用于对稳定性要求不是很严苛,但绝对能满足绝大部分需求的场合

    /dev/ttyAMA0 挖坑留给下一节。

    硬件连接:

     

    开启ttyS0串口设置方法:

    左上角的树莓图标 Menu - Preferences - Raspberry Pi Configuration

    Serial Port 勾上 Enable,Serial Console 勾 Disable。之后需要重启,点击 YES。

    重启后进入终端,ls /dev/ttyS*,如显示 /dev/ttyS0 则正确。

     

    串口库用到的函数:

    使用时需要添加 #include <wiringSerial.h>

    函数语句 函数功能
    int serialOpen (char *device, const int baud) 打开 *device设备地址的串口,波特率 baud
    void serialClose(int fd) 关闭 fd关联的串口
    void serialFlush (int fd) 清空串行缓冲区(TX和RX)
    void serialPutchar(int fd, unsigned char c) 通过串口发送一个字节的数据
    void serialPuts (int fd, char *s) 通过串口发送字符串
    void serialPrintf (int fd, char *message, ...) 串口打印,用法跟printf一样
    int serialDataAvail (int fd) 返回串口接收缓存区的可用字节数
    int serialGetchar (int fd) 从接收缓存区得到一个字节
       
       

     

    c代码测试程序1:

    Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

    (从串口接收缓存区读取10个字节,并完整输出接收到的数据)

    #include <stdio.h>
    #include <wiringPi.h>
    #include <wiringSerial.h>
    
    int main(void)
    {
        int hs1;
        int snum = 0;
    
        wiringPiSetup();                        // 使用wiring编码去初始化GPIO序号
        hs1 = serialOpen("/dev/ttyS0", 115200); // 打开 /dev/ttyS0 串口设备,波特率115200
    
        printf("ttyS0 uart test1:\n");          // 终端打印
        serialPrintf(hs1, "Hello World!\r\n");  // 串口打印
        serialPrintf(hs1, "Enter 10 letters:\r\n");
    
        /* 串口缓存区读取10个字节,并完整输出接收到的数据 */
        do{
            snum = serialDataAvail(hs1);        // 获取串口接收缓存区的可用字节数
        }while(snum < 10);
    
        while(snum--)
        {
            serialPutchar(hs1,serialGetchar(hs1));  // 通过串口发送字节
        }
        serialPrintf(hs1, "\r\nserial close\r\n\r\n");  // 串口打印
    
        serialClose(hs1);                       // 关闭串口
        return 0;
    }

     

    c代码测试程序2:

    (讲串口接收缓存区的内容记录到数组,遇到\n结束,并完整输出接收到的数据)

    #include <stdio.h>
    #include <wiringPi.h>
    #include <wiringSerial.h>
    
    int main(void)
    {
        int hs1;
        int snum = 0;
        int tnum = 0;
        unsigned char chrtmp[100];
        wiringPiSetup();                            // 使用wiring编码去初始化GPIO序号
        hs1 = serialOpen("/dev/ttyS0", 115200);     // 打开 /dev/ttyS0 串口设备,波特率115200
    
        printf("ttyS0 uart test2:\n");              // 终端打印
        serialPrintf(hs1, "Hello World!\r\n");      // 串口打印
        serialPrintf(hs1, "Enter a paragraph and end with Enter:\r\n");
    
        /* 串口缓存区记录到数组,遇到\n结束,并完整输出接收到的数据 */
        while (1)
        {
            snum = serialDataAvail(hs1);            // 获取串口接收缓存区的可用字节数
            if(snum > 0)
            {
                chrtmp[tnum] = serialGetchar(hs1);  // 从接收缓存区读取一个字节
                tnum ++;
                if(chrtmp[tnum - 1] == '\n') break;
            }
            //delay(2000);
            //printf("%d  ,  %d\n",snum,tnum);
        }
    
        int i = 0;
        while (tnum--)
        {
            serialPutchar(hs1,chrtmp[i++]);         // 通过串口发送字节
        }
        serialPrintf(hs1, "\r\nserial close\r\n\r\n");  // 串口打印
    
        serialClose(hs1);                           // 关闭串口
        return 0;
    }

     

    波特率范围:

    从 wiringSerial.c 中截取的一段代码,里面定义了波特率的设置,串口波特率只能选择其中的值使用。

      switch (baud)
      {
        case      50:	myBaud =      B50 ; break ;
        case      75:	myBaud =      B75 ; break ;
        case     110:	myBaud =     B110 ; break ;
        case     134:	myBaud =     B134 ; break ;
        case     150:	myBaud =     B150 ; break ;
        case     200:	myBaud =     B200 ; break ;
        case     300:	myBaud =     B300 ; break ;
        case     600:	myBaud =     B600 ; break ;
        case    1200:	myBaud =    B1200 ; break ;
        case    1800:	myBaud =    B1800 ; break ;
        case    2400:	myBaud =    B2400 ; break ;
        case    4800:	myBaud =    B4800 ; break ;
        case    9600:	myBaud =    B9600 ; break ;
        case   19200:	myBaud =   B19200 ; break ;
        case   38400:	myBaud =   B38400 ; break ;
        case   57600:	myBaud =   B57600 ; break ;
        case  115200:	myBaud =  B115200 ; break ;
        case  230400:	myBaud =  B230400 ; break ;
        case  460800:	myBaud =  B460800 ; break ;
        case  500000:	myBaud =  B500000 ; break ;
        case  576000:	myBaud =  B576000 ; break ;
        case  921600:	myBaud =  B921600 ; break ;
        case 1000000:	myBaud = B1000000 ; break ;
        case 1152000:	myBaud = B1152000 ; break ;
        case 1500000:	myBaud = B1500000 ; break ;
        case 2000000:	myBaud = B2000000 ; break ;
        case 2500000:	myBaud = B2500000 ; break ;
        case 3000000:	myBaud = B3000000 ; break ;
        case 3500000:	myBaud = B3500000 ; break ;
        case 4000000:	myBaud = B4000000 ; break ;
    
        default:
          return -2 ;
      }

     

    展开全文
  • 电脑需要提前安装的工具: ... windows端代码编辑工具: VScode、Source Insight、Sublime, 都是不错的选择。...挖坑计划:wiring GPIO输出 led、GPIO输入 按键、uart/serial终端,IIC MPU6050 PCA96...

    Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

    使用到的硬件:

    led,200Ω左右的电阻、杜邦线。

     

    上一节使用最基本的 GPIO数字输出,led亮了,可如果想要调整led亮度怎么办?

    PWM简介

    PWM脉宽调制技术广泛存在于现实生活中,例如TFT显示屏的背光亮度调整,电机的速度控制,开关电源输出电压的控制。

    相比于早期的线性调制,PWM具有效率高、电路简单等优点。

    图中a)可以类比于灯的亮度/电机的速度/电源输出的电压,b)就对应为PWM的脉冲宽度。

    如果想要灯变亮一些,就增大PWM的占空比;如果想要灯暗一些,就减小PWM的占空比。

     

    树莓派的硬件PWM

    树莓派的硬件pwm只有l路,也就是 物理引脚的12引脚,wiringPi引脚的1引脚

    树莓派内部pwm发生器的基频为19.2MHz,输出频率 freq(Hz) = 19200000 / divisor / range

    使用到的函数

    函数语句 函数功能
    wiringPiSetup(); 使用wiring编码去初始化GPIO序号
    pinMode(int pin, int mode); 设置GPIO电气属性
    pwmSetRange(unsigned int range); 设置pwm脉宽范围,range与divisor共同决定pwm输出频率
    pwmSetClock(int divisor); 设置pwm分频系数,range与divisor共同决定pwm输出频率
    pwmWrite(int pin, int value); 输出pwm值,到pwm引脚
    delay(unsigned int howLong); 延时 xx ms

    c代码:

    Git例程源码仓库https://github.com/ZhiliangMa/raspberry.git

    wiringPi编码的1引脚,led亮度渐变。

    #include <wiringPi.h>
    
    int hpwmLed = 1;                    // 定义使用wiringPi编码的1引脚
    int main(void)
    {
        int xnum = 0;
        wiringPiSetup();                // 使用wiring编码去初始化GPIO序号
        pinMode(hpwmLed, PWM_OUTPUT);   // 设置GPIO电气属性为pwm输出
        pwmSetRange(1024);              // pwm脉宽范围 0~1024
        pwmSetClock(75);                // 250Hz,19.2MHz / 75 / 1024 = 250Hz
        while(1)
        {
            for(xnum = 0; xnum <= 1024; xnum++)
            {
                pwmWrite(hpwmLed,xnum);
                delay(2);               // 延时2ms
            }
        }
        return 0;
    }

     

    展开全文
  • 前两篇介绍了树莓派的 ttyS0 和 ttyAMA0的使用,有详细的配置介绍和代码,有兴趣的可前往: https://blog.csdn.net/Mark_md/article/details/107143057 https://blog.csdn.net/Mark_md/article/details/107181151 ...
  • ls -l /dev/serial* 树莓派默认将 serial0 映射到 外接GPIO的15、16脚。默认将 serial1 映射到 BT蓝牙 上。 所以如果想要将 ttyAMA0映射到外部 GPIO上,只需要将 serial0 和serial1 他俩链接的对象互换。 配置开启...
  • 树莓派GPIO测试程序

    2018-10-18 16:36:33
    树莓派GPIO测试程序 ,树莓派GPIO控制LED亮灭程序。使用之前需安装GPIOpython
  • 树莓派GPIO
  • 树莓派 GPIO

    2015-06-03 00:44:05
    树莓派现在越来越火,网上树莓派的资料也越来越多。树莓派源自英国,国外嵌入式开源领域具有良好的分享精神,树莓派各种集成也层出不穷,下面推荐树莓派 GPIO 接口图
  • 树莓派GPIO控制

    2019-04-24 16:53:59
    树莓派内核中已经编译自带了 gpio 的驱动,我们常通过一些第三...python GPIO 是一个小型的 python ,可以帮助用户完成 raspberry 相关 IO 口操作,但是 python GPIO 还没有支持 SPI、I2C 或者 1-wire 等总线接口。
  • PHP 控制 树莓派 gpio 高低电平安装wiringpi 和 php扩展【开发语言】——C语言【简单介绍】——wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和...
  • 树莓派GPIO引脚介绍

    千次阅读 2018-12-27 13:05:12
    在已经安装好GPIO库的情况下,命令行输出gpio readall即可列出IO引脚的定义和编号,显示如下(替换为图) 编号规则可参考树莓派GPIO控制 Python配置GPIO安装参考: sudo apt-get install python-dev  sudo apt...
  • 树莓派GPIO口上手

    千次阅读 2017-10-14 19:35:59
    树莓派GPIO控制有以下三种方式: Python GPIO 该更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python,可以帮助用户完成raspb
  • 树莓派GPIO点灯

    2021-04-17 00:05:17
    【准备工作】 首先准备一个能正常使用的树莓派,远程登录或者接屏幕都随意,这...此工具由GPIO Zero Python提供,默认情况下,它安装在Raspbian桌面映像上,但不安装在Raspbian Lite上。 打开终端输入命令 pinout 看
  • 可以用java开控制树莓派GPIO口了
  • 如果您以前做过类似的事情,则可能是使用RPi.GPIO库通过Python 完成的 ,该库已在无数项目中使用。 现在,有一种与物理组件进行交互的更为简单的方法:一种名为GPIO Zero的新友好Python API。 ...
  • php控制树莓派GPIO

    2020-04-25 15:39:34
    如果搭建树莓派的服务器和PHP没有问题,可以用exec...但是如果调用python的GPIO库,则没有反应,php代码: <?php // echo "hello python"; exec("python3 test1.py",$out); foreach($out as $value) { ...
  • 树莓派GPIO初探-开关使用

    千次阅读 2019-05-21 10:42:31
    然后感觉引脚图的扩充没有说的不清不楚,所以我在这章里补充一下关于引脚编码对应的相关的库,wiringPi编码可以使用树莓派的wiringPi库用C代码来写控制程序,BCM编码可以使用gpiozero库和RPI.GPIO库,BOARD编码可以...
  • Pi4J(http://pi4j.com/)是专门用来控制树莓派GPIO口以及通信的Java。它有如下功能: Export & unexport GPIO pinsConfigure GPIO pin directionConfigure GPIO pin edge ...
  • 一、实验要求 利用树莓派驱动数码管,使其能显示时间和日期。...关于如何驱动数码管请参考:《树莓派GPIO入门(四) :用数码管做个简单的计数器》 四、实验代码 import RPi.GPIO as GPIO import time ...
  • 这个 Raspberry Pi 模拟器模拟了 RPi.GPIO 中使用的一些函数(使用 python)。 这个图书馆的目的是教育。 阅读 WIKI 了解更多信息。
  • 树莓派GPIO接口常见的命令

    千次阅读 2020-02-26 10:36:00
    参考: ... https://www.jianshu.com/p/e93e2fe3f66a基于树莓派的python GPIO编程-常用函数综合整理 RPi.GPIO库常用函数 1, import RPi.GPIO as ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 542
精华内容 216
关键字:

树莓派gpio库