若该文为原创文章,未经容许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:http://www.javashuo.com/article/p-wxwjppoc-mo.html
本文章博客地址:http://www.javashuo.com/article/p-dlyxoukt-mo.html
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么本身研究git
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门)模块化
上一篇:《树莓派开发笔记(四):更便捷的开发,qt远程运行(主机qt开发一键远程运行到目标机上) 》测试
下一篇:《树莓派开发笔记(六):GPIO口的UART的使用(串口通信)》ui
搭建好完整的Qt开发环境,对于开发Qt应用按照正常的开发便可,操做io口涉及到单片机硬件知识,本篇介绍树莓派相似于单片机的GPIO口使用(硬件+软件)。this
咱们模块化代码,写一个引脚输出的程序,之后须要相似直接修改引脚编号(或枚举)便可。.net
引入libwiringPi库。设计
在qt中控制GPIO主要是使用wiring,树莓派已自带,咱们查询树莓派的物理引脚与wiringPi库的编号对应表,以下图:3d
若是咱们要操做GPIO2,对应的物理引脚为3,以下图:code
咱们操做引脚的时候,引脚序号就为8(wPI),当前模式为输出,V表明的是当前的输入电压,1:3.3V,0:0V。blog
更详细的具体参照Demo1理解。
同时,咱们在工程中要加入对应的头文件和库,如何调用wiringPi,请参照具体例程。
使用物理引脚3,默认功能为GPIO2,咱们使用GPIO2驱动LED,此时涉及到硬件知识,树莓派的GPIO口的输出电压为3.3V,因此先设置GPIO为输出高低电平,间隔1s,由于是测试,不使用限流电阻。
限流电阻解释下:电路VCC--->电阻R--->LED--->GND,LED分压为固定的,VCC减去LED压降后获得的电压除以电阻R则是该条电路的电流,因此电阻决定了电流大小,故称之为限流电阻,通常的GPIO口都对电流有要求,例如stm32的单个GPIO口不超过25mA,总的电流也有限制,因此在开发的过程当中,须要根据实际状况设计电路原理图。
跳线的电路原理图以下:
初始化
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); _gpioOut.init(GpioOut::GPIO2, false); ui->label_gpio2->setStyleSheet(QString("background-color: %1").arg("green")); startTimer(1000); }
每1s钟切换
void MainWindow::timerEvent(QTimerEvent *event) { if(_gpioOut.readOutput(GpioOut::GPIO2)) { _gpioOut.setOutput(GpioOut::GPIO2, false); ui->label_gpio2->setStyleSheet(QString("background-color: %1").arg("green")); }else{ _gpioOut.setOutput(GpioOut::GPIO2, true); ui->label_gpio2->setStyleSheet(QString("background-color: %1").arg("red")); } }
gpiocout.h
#ifndef GPIOOUT_H #define GPIOOUT_H #include <QObject> #include <QMap> #include <QDebug> #include "wiringPi.h" class GpioOut : public QObject { Q_OBJECT public: enum GPIO{ GPIO2 = 3, }; public: explicit GpioOut(QObject *parent = 0); public slots: void init(GPIO pin, bool output = false); void setOutput(GpioOut::GPIO pin, bool output); bool readOutput(GpioOut::GPIO pin); private: QMap<GPIO, int> _mapPhysical2Wiring; }; #endif // GPIOOUT_H gpioout.cpp #include "gpioout.h" GpioOut::GpioOut(QObject *parent) : QObject(parent) { wiringPiSetup(); _mapPhysical2Wiring.insert(GPIO2, 8); } void GpioOut::init(GpioOut::GPIO pin, bool output) { pinMode(_mapPhysical2Wiring.value(pin), OUTPUT); digitalWrite(_mapPhysical2Wiring.value(pin), output?HIGH:LOW); } void GpioOut::setOutput(GpioOut::GPIO pin, bool output) { digitalWrite(_mapPhysical2Wiring.value(pin), output?HIGH:LOW); } bool GpioOut::readOutput(GpioOut::GPIO pin) { return digitalRead(_mapPhysical2Wiring.value(pin)); }
使用物理引脚3,默认功能为GPIO2,咱们使用GPIO2接受输入,此时涉及到硬件知识,让树莓派的GPIO口的输入电压为3.3V/0V即为输入1仍是输入0,也涉及到限流电阻,通常使用1K或者10K的,由于是测试,此处不使用限流电阻,在开发的过程当中,须要根据实际状况设计电路原理图。
初始化
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); _gpioIn.init(GpioIn::GPIO2); bool in = _gpioIn.readOutput(GpioIn::GPIO2); ui->label_gpio2->setStyleSheet(QString("background-color: %1").arg(in?"red":"green")); startTimer(1000); }
每一秒钟检测一次
void MainWindow::timerEvent(QTimerEvent *event) { bool in = _gpioIn.readOutput(GpioIn::GPIO2); ui->label_gpio2->setStyleSheet(QString("background-color: %1").arg(in?"red":"green")); }
gpioin.h
#ifndef GPIOIN_H #define GPIOIN_H #include <QObject> #include <QMap> #include <QDebug> #include "wiringPi.h" class GpioIn : public QObject { Q_OBJECT public: enum GPIO{ GPIO2 = 3, }; public: explicit GpioIn(QObject *parent = 0); public slots: void init(GPIO pin); bool readOutput(GpioIn::GPIO pin); private: QMap<GPIO, int> _mapPhysical2Wiring; }; #endif // GPIOIN_H gpioin.h #include "gpioin.h" GpioIn::GpioIn(QObject *parent) : QObject(parent) { wiringPiSetup(); _mapPhysical2Wiring.insert(GPIO2, 8); } void GpioIn::init(GpioIn::GPIO pin) { pinMode(_mapPhysical2Wiring.value(pin), OUTPUT); } bool GpioIn::readOutput(GpioIn::GPIO pin) { return digitalRead(_mapPhysical2Wiring.value(pin)); }
上一篇:《树莓派开发笔记(四):更便捷的开发,qt远程运行(主机qt开发一键远程运行到目标机上) 》
下一篇:《树莓派开发笔记(六):GPIO口的UART的使用(串口通信)》
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:http://www.javashuo.com/article/p-wxwjppoc-mo.html
本文章博客地址:http://www.javashuo.com/article/p-dlyxoukt-mo.html