OrangePi PC2 H5 驱动GPIO利用DTH11获取温湿度

简介: 去OrangePi官网寻找了一会还是没找到H5 GPIO(PC2)驱动的方法,但是在Armbian一位朋友帮忙编译最新的4.10 pc2 系统的时候发现了H5 的GPIO选项,我在GitHub寻找了一会发现还是H3的GPIO启动很多,没找到H5的GPIO驱动,但是目前解决了驱动,但是支持C语言的支持,还没有找到GPIO for python的版本,估计不久就会有大神移植了。
  • 去OrangePi官网寻找了一会还是没找到H5 GPIO(PC2)驱动的方法,但是在Armbian一位朋友帮忙编译最新的4.10 pc2 系统的时候发现了H5 的GPIO选项,我在GitHub寻找了一会发现还是H3的GPIO启动很多,没找到H5的GPIO驱动,但是目前解决了驱动,但是支持C语言的支持,还没有找到GPIO for python的版本,估计不久就会有大神移植了。

编译GPIO的H5的驱动

git clone https://github.com/kazukioishi/WiringOP.git -b h5
cd WiringOP
chmod +x ./build
sudo ./build

GPIO 打印信息

# gpio -v

gpio version: 2.20
Copyright (c) 2012-2014 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Banana Pro Details:
  Type: Banana Pro, Revision: 1.2, Memory: 1024MB, Maker: LeMaker

显示

[hang@PC2]$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT5 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT5 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT5 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 0 | ALT5 | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 | ALT5 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT5 | 0 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT5 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT4 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT0 | 0 | 21 || 22 | 0 | ALT5 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT4 | 0 | 23 || 24 | 0 | ALT4 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT4 | 0 | 27 || 28 | 0 | ALT4 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT5 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT5 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 |  OUT | 1 | 37 || 38 | 0 | ALT5 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT5 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+

DTH11 代码


/*
 *  dht11.c:
 *      Simple test program to test the wiringPi functions
 *      DHT11 test
 */

#include <wiringPi.h>

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAXTIMINGS      85
#define DHTPIN    7
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)\n",
            dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3], f );
    } else {
        printf( "Data not good, skip\n" );
    }
}

int main( void ) {
    printf( "Raspberry Pi wiringPi DHT11 Temperature test program\n" );

    if ( wiringPiSetup() == -1 )
        exit( 1 );

    while ( 1 ) {
        read_dht11_dat();
        delay( 1000 ); /* wait 1sec to refresh */
    }

    return(0);
}

编译并设置环境变量

# 编译 dth11.c
gcc -Wall -o dht11 dht11.c -lwiringPi -lpthread

# 设置环境变量
export WIRINGPI_DEBUG=TRUE
unset WIRINGPI_DEBUG

运行结果

Raspberry Pi wiringPi DHT11 Temperature test program
Data not good, skip
Humidity = 22.0 % Temperature = 23.0 *C (73.4 *F)
Humidity = 22.0 % Temperature = 23.0 *C (73.4 *F)
Data not good, skip
Data not good, skip
Humidity = 22.0 % Temperature = 23.0 *C (73.4 *F)


相关文章
|
存储 运维 自然语言处理
Cassandra 的过去、现在、未来
11月16日在北京,由DataFun和阿里云联合举办的首场Cassandra中文社区线下meetup,阿里云高级技术专家陈江分享了Cassandra的发展历程、优势特点、适合的使用场景、不推荐的场景,以及即将发布的4.0特性。
2946 0
Cassandra 的过去、现在、未来
|
SQL 安全 数据安全/隐私保护
关于“iKuai”路由产品漏洞情况的通报
本文讲的是关于“iKuai”路由产品漏洞情况的通报,近日,国家信息安全漏洞库(CNNVD)收到北京长亭科技有限公司关于企业级流路由产品“iKuai IK-G20SQL注入漏洞”,“iKuai小白SQL注入漏洞”和“iKuai小白命令注入漏洞”的情况报送。
3613 0
|
6月前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
1891 3
|
编解码 搜索推荐 开发者
《深度剖析:鸿蒙系统不同终端设备的UI自适应布局策略》
在万物互联时代,鸿蒙系统凭借分布式理念和技术架构,在智能终端领域迅速崛起。然而,如何实现应用在多设备上的完美UI布局成为关键挑战。本文探讨了鸿蒙UI自适应布局的重要性、技术原理及设计原则,包括灵活的布局组件(Row、Column、Flex)、尺寸单位适配(lpx)、媒体查询与断点机制,以及基于用户体验的设计方法。通过实践案例分析,展示了音乐应用在手机、平板和智能电视上的出色表现,并展望了未来智能化、个性化的布局趋势。掌握这些技术与原则,开发者将为用户带来更优质的跨设备体验,推动鸿蒙生态繁荣发展。
416 8
|
人工智能 运维 Serverless
零门槛体验DeepSeek-R1满血版评测
本文评测了“零门槛、轻松部署您的专属DeepSeek模型”解决方案。文档步骤清晰,逻辑顺畅,特别在调用API和配置客户端方面指引详细,确保部署顺利。体验过程中提供了充足引导与帮助,涵盖多种部署方式如百炼API调用、PAI平台部署等,适合不同需求用户。推荐基于百炼API的满血版,因其快速上手、按量付费、弹性扩展和易于管理的优势。整体方案基本满足实际需求,建议进一步补充性能评估和成本优化等内容。
579 18
|
运维 供应链 安全
阿里云先知安全沙龙(武汉站) - 网络空间安全中的红蓝对抗实践
网络空间安全中的红蓝对抗场景通过模拟真实的攻防演练,帮助国家关键基础设施单位提升安全水平。具体案例包括快递单位、航空公司、一线城市及智能汽车品牌等,在演练中发现潜在攻击路径,有效识别和防范风险,确保系统稳定运行。演练涵盖情报收集、无差别攻击、针对性打击、稳固据点、横向渗透和控制目标等关键步骤,全面提升防护能力。
|
存储 人工智能 关系型数据库
拥抱Data+AI|玩家去哪儿了?解码Data+AI如何助力游戏日志智能分析
本文为阿里云瑶池数据库「拥抱Data+AI」系列连载第2篇,基于真实客户案例和最佳实践,探讨如何利用阿里云Data+AI解决方案应对游戏行业挑战,通过AI为游戏行业注入新的活力。文章详细介绍了日志数据的实时接入、高效查询、开源开放及AI场景落地,展示了完整的Data+AI解决方案及其实际应用效果。
|
数据采集 分布式计算 OLAP
最佳实践:AnalyticDB在企业级大数据分析中的应用案例
【10月更文挑战第22天】在数字化转型的大潮中,企业对数据的依赖程度越来越高。如何高效地处理和分析海量数据,从中提取有价值的洞察,成为企业竞争力的关键。作为阿里云推出的一款实时OLAP数据库服务,AnalyticDB(ADB)凭借其强大的数据处理能力和亚秒级的查询响应时间,已经在多个行业和业务场景中得到了广泛应用。本文将从个人的角度出发,分享多个成功案例,展示AnalyticDB如何助力企业在广告投放效果分析、用户行为追踪、财务报表生成等领域实现高效的数据处理与洞察发现。
1211 0

热门文章

最新文章