` 本帖最后由 ゛向日葵的执着 于 2017-10-13 11:16 编辑
本篇文章主要是进行wiringPi库的安装以及测试,对其GPIO口进行基本的测试和操作。 一、wiringPi库的安装 在友善之臂的官方资料中介绍了Nano Pi Duo 开发板上移植了wiringPi库,wiringPi库除了提供wiringPi类库及其头文件外,还提供了一个命令行工具gpio:可以用来设置和读写GPIO管脚,以方便在Shell脚本中控制GPIO管脚,下面介绍如何在Nano Pi Duo开发板中安装wiringPi库。 安装的主要过程主要是进行wiringNP的源码下载并且编译安装
- $ git clone https://github.com/friendlyARM/WiringN
- $ cd WiringNP/
- $ sudo chmod 755 build
- $ ./build
复制代码
安装完成后使用下面命令测试,相应的GPIO口编号会被打印出来
二、点亮LED灯 在上述过程中安装好了wiringPi库,接下来就可以编写一个简单的GPIO口操作函数进行测试了,编写LED的简单程序进行测试。 在Nano Pi底板下有9x2 Pin header的引脚,如下,将使用其中一个引脚作为LED灯的阳极,另外一端阴极接地即可,红色圈出的地方是笔者使用的引脚端。
GPIOG7在wiringPi库中的wPi编号如下,为9
简单LED测试程序编写
代码:
- #include
- int main(void)
- {
- wiringPiSetup() ;
- pinMode (9, OUTPUT) ;
- for(;;)
- {
- digitalWrite(9, HIGH) ;
- delay (500) ;
- digitalWrite(9, LOW) ;
- delay (500) ;
- }
- }
复制代码
使用下面命令在终端上进行程序编译
- $sudo gcc -Wall -o test test.c -lwiringPi -lpthread
复制代码
运行程序,发现LED灯进行闪烁,并且使用gpio readall查看GPIO引脚状态为输出模式
三、软PWM波测试 wiringPi里面包含了软件PWM的库,包含软件PWM的头文件即可使用软PWM波,下面的程序测试软PWM的使用,使用上面的IO口的LED进行测试,程序的主要作用是改变PWM的占空比,使其LED灯达到渐暗渐亮的效果,从而可以验证软件PWM的正常使用。 代码如下:
- #include
- #include
- #include
- #include
- #include
- #define LED 9
- int main(void)
- {
- int i = 0;
- if (wiringPiSetup() == -1)
- {
- printf("Setup GPIO error!
- ");
- return -1;
- }
- softPwmCreate(LED, 0, 100);
- while (1)
- {
- for (i = 0; i < 100; i++)
- {
- softPwmWrite(LED, i);
- delay(10);
- }
- for (i = 99; i > 0; i--)
- {
- softPwmWrite(LED, i);
- delay(10);
- }
- }
- return 0;
- }
复制代码
程序保存为softpwm.c,编写完成后,对程序进行编译执行,执行后LED达到渐暗渐亮的效果,也就是常见的LED呼吸效果,测试完成。
- $ sudo gcc softpwm.c -o softpwm -lwiringPi -lpthread
- $ sudo ./softpwm
复制代码
wiringPi库中具有软件PWM的库使用,非常方便,但是软件模拟的PWM有一些限制。因为PWM的频率越高,所需要的CPU资源越多,所以在这之间有一些平衡。 四、温湿度传感器DHT11测试 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC 测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
测试代码:
- #include
- #include
- #inclue
- #include
- #define MAXtiMINGS 85
- #define DHTPIN 9
- int dht11_dat[5] = { 0, 0, 0, 0, 0 };
- void read_dht11_dat()
- {
- uint8_t laststate = HIGH;
- uint8_t counter = 0;
- uint8_t j = 0, i;
- float f; /* fahrenheit */
- dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0;
- /* pull pin down for 18 milliseconds */
- pinMode( DHTPIN, OUTPUT );
- digitalWrite( DHTPIN, LOW );
- delay( 18 );
- /* then pull it up for 40 microseconds */
- digitalWrite( DHTPIN, HIGH );
- delayMicroseconds( 40 );
- /* prepare to read the pin */
- pinMode( DHTPIN, INPUT );
- /* detect change and read data */
- for ( i = 0; i < MAXTIMINGS; i++ )
- {
- counter = 0;
- while ( digitalRead( DHTPIN ) == laststate )
- {
- counter++;
- delayMicroseconds( 1 );
- if ( counter == 255 )
- {
- break;
- }
- }
- laststate = digitalRead( DHTPIN );
- if ( counter == 255 )
- break;
- /* ignore first 3 transitions */
- if ( (i >= 4) && (i % 2 == 0) )
- {
- /* shove each bit into the storage bytes */
- dht11_dat[j / 8] <<= 1;
- if ( counter > 16 )
- dht11_dat[j / 8] |= 1;
- j++;
- }
- }
- /*
- * check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
- * print it out if data is good
- */
- if ( (j >= 40) &&
- (dht11_dat[4] == ( (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF) ) )
- {
- f = dht11_dat[2] * 9. / 5. + 32;
- printf( "Humidity = %d.%d %% Temperature = %d.%d *C (%.1f *F)
- ",
- dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3], f );
- }
- else {
- printf( "Data not good, skip
- " );
- }
- }
- int main( void )
- {
- printf( "Nano Pi Duo wiringPi DHT11 Temperature test program
- " );
- if ( wiringPiSetup() == -1 )
- exit( 1 );
- while ( 1 )
- {
- read_dht11_dat();
- delay( 1000 ); /* wait 1sec to refresh */
- }
- return(0);
- }
复制代码
连接好硬件,将DHT11的数据口连接到其中一个GPIO上,将代码程序进行编译执行即可测试出环境的温湿度。 五、总结 使用wiringPi 库进行基本的GPIO测试文章就介绍到这里,最后,感谢电子发烧友以及友善给予了笔者评估试用Nano Pi Duo开发板的机会。
`
|