Skip to content
View in the app

A better way to browse. Learn more.

Armbian Community Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

dht22 and orenge pi zero

Featured Replies

hi freinds
i'm trying to use a dht22  to read temperature and humidity ,
with Armbian 5.65 (stretch) 4.14.78-sunxi and orenge pi zero

 

orange pi state like this

 

/etc/modules-load.d/modules.conf
 

#gpio sunxi
#gc2035 wire
wl-sunxi
wl-gpio
wl-therm
#sunxi-cir
#xradio_wlan
g_serial
#xradio_wlan
i2c -dev

/etc/default/cpufrequtils
ENABLE=true
MIN SPEED=6000000
MAX_SPEED=1200000
GOVERNOR=interactive


/boot/armbianEnv.txt


 

verbosity=1
logo=disabled
console=both
disp_mode=1920x1080p60
overlay prefix=sun8i-h3
overlays=usbhost2 usbhost3 12c0 wl-gpio
rootdev=WID=55cee3e8-79d6-4dd3-ab14-99274fo626cb
rootfstype=ext4
param wl_pin=PA10
param wl_pin
int_pullup=1
usbstorageguirks=0x2537:0x1066:u,0x2537:0x1068:u


and im trying with this code
https://www.piprojects.xyz/temperature-sensor-orange-pi-python-code/
and
https://community.home-assistant.io/t/extend-dht-sensor-for-orange-pi/39838

from pyA20.gpio import gpio
from pyA20.gpio import port
 
#import RPi.GPIO as GPIO
import dht22
import time
import datetime
 
# initialize GPIO
#gpio.setwarnings(False)
#gpio.setmode(GPIO.BCM)
PIN2 = port.PA6
gpio.init()
#gpio.cleanup()
 
 
# read data using pin 14
instance = dht22.DHT22(pin=PIN2)
 
while True:
    result = instance.read()
    if result.is_valid():
        print("Last valid input: " + str(datetime.datetime.now()))
        print("Temperature: %.2f C" % result.temperature)
        print("Humidity: %.2f %%" % result.humidity)
 
    time.sleep(1)

dht22 work correct with raspberry and rasbian
also test ds18b20 with orange pi and work good but i need humidity sensor

i dont know what's the problem??!!

Thanks for any help

You have a problem with the dht22 working. You never specify what the problem actually is. What's the error code you're getting?

 

Ima go ahead and take a wild guess that you don't initiate a configuration for that port.
put the following after gpio.init()

 

PIN2 =gpio.setcfg(PIN2, gpio.OUTPUT)

  • Author

i dont have any error

the output is nothing and "time.sleep(1)" is runs.

 

the code is here

https://github.com/ionutpi/DHT22-Python-library-Orange-PI

 

44 minutes ago, StuxNet said:

PIN2 =gpio.setcfg(PIN2, gpio.OUTPUT) 

 

defined in >>dht22.py

in class DHT22

import time
from pyA20.gpio import gpio
from pyA20.gpio import port
#import RPi


class DHT22Result:
    'DHT22 sensor result returned by DHT22.read() method'

    ERR_NO_ERROR = 0
    ERR_MISSING_DATA = 1
    ERR_CRC = 2

    error_code = ERR_NO_ERROR
    temperature = -1
    humidity = -1

    def __init__(self, error_code, temperature, humidity):
        self.error_code = error_code
        self.temperature = temperature
        self.humidity = humidity

    def is_valid(self):
        return self.error_code == DHT22Result.ERR_NO_ERROR


class DHT22:
    'DHT22 sensor reader class for Raspberry'

    __pin = 0

    def __init__(self, pin):
        self.__pin = pin

    def read(self):
        gpio.setcfg(self.__pin, gpio.OUTPUT)

        # send initial high
        self.__send_and_sleep(gpio.HIGH, 0.05)

        # pull down to low
        self.__send_and_sleep(gpio.LOW, 0.02)

        # change to input using pull up
        #gpio.setcfg(self.__pin, gpio.INPUT, gpio.PULLUP)
	gpio.setcfg(self.__pin, gpio.INPUT)
	gpio.pullup(self.__pin, gpio.PULLUP)


        # collect data into an array
        data = self.__collect_input()

        # parse lengths of all data pull up periods
        pull_up_lengths = self.__parse_data_pull_up_lengths(data)

        # if bit count mismatch, return error (4 byte data + 1 byte checksum)
        if len(pull_up_lengths) != 40:
            return DHT22Result(DHT22Result.ERR_MISSING_DATA, 0, 0)

& ....

 

Got this same wrapper, as well as others to work on an NPiNeo and an OPiZ recently (defining outside ) but you're right it's prolly redundant.

I got it working using this wrapper (forked/updated within 1 year opposed to 2yr on the one u link to) https://github.com/jingl3s/DHT11-DHT22-Python-library-Orange-PI and the following script.


What happens when you print(instance) after it's defined?

from pyA20.gpio import gpio
from pyA20.gpio import port

import dht
import time
import datetime

# initialize GPIO
temPin = port.PG11
trigPin = port.PG7
gpio.init()
gpio.setcfg(trigPin, gpio.OUTPUT)

# read data using pin 14
instance = dht.DHT(pin=temPin, sensor=22)

def tempOut():
    celToFar = result.temperature * 1.8 + 32
    print("Last valid input: " + str(datetime.datetime.now()))
    print("Celsius: {0:0.1f} C".format(result.temperature))
    print("Fahrenheit: {0:0.1f} F".format(celToFar))
    print("Humidity: {0:0.1f} %%".format(result.humidity))
    print("\n")

def trigPinState(trigPin):    
    trigState = gpio.input(trigPin) # What is state of trigger pin?
    if trigState == 0: #Then it's low
        return 'Low: %s' % trigState
    elif trigState == 1: # then its high
        return 'High: %s' % trigState
    else:
        print('error!)

while True:
    result = instance.read()
    if result.is_valid():
        tempOut()
        if celToFar < 75:
            gpio.output(trigPin, gpio.HIGH)
        elif celToFar > 75:
            gpio.output(trigPin, gpio.LOW)

    time.sleep(.2)

 

  • Author

thanks your answer

 

i changed gpio like

 

# initialize GPIO
temPin = port.PA13
trigPin = port.PA14

 

when run program , say error

root@orangepizero:-/orangepi_PC_gpio_py113/MiT22-Python-library-Orange-PI# sudo python dht3 .py

File ''dht3 . py

a , line 32 print ( ' error ! )
Synt axError : EOL while scanning string literal

 

edit line 32 ('error!')

 

and then

root@orangepizero:-/DHT22-master# sudo python dht3.py

Last valid input: 2018-10-28 20:52:24.470819

Celsius: 26.5 C

Fahrenheit: 79.7 F

Humidity: 45.2 %%
Traceback (most recent call last):

File 'dht3.py', line 38, in <module>

if celToFar < 75: NameError: name 'celToFar' is not defined

 

i have question

what's trigPin and what to do this pin?

The script I gave you was a very loose example and it includes things I was using for my specific project. Things that you don't necessarily need to use for your own.

 

trigPin in this situation is just an 'empty' pin that I use as an LED trigger. If temperature is above X, turn on LED. If temp below X, turn LED off. 

 

If you just want a temp and humidity readout, remove every function, set pins how you'd like and just print tempOut()

Then go here: https://www.codecademy.com/learn/learn-python
Or here: https://www.codewars.com/?language=python

Or here: https://www.youtube.com/watch?v=apACNr7DC_s

 

Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.