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.

DHT11 Module and Orange PI Zero

Featured Replies

Hello everyone,
 
I need use gpio pins in my Orange Pi Zero. I found the pyA20 library: orangepi_PC_gpio_pyH3: https://github.com/duxingkei33/orangepi_PC_gpio_pyH3...
I bought the DHT11 sensor, but I could not get it to work in any way. Is there anyone working on this subject?
For example, my code block: 
 
#!/usr/bin/env python
from pyA20.gpio import gpio
from pyA20.gpio import port
from pyA20.gpio import connector
from time import sleep

def bin2dec(string_num):
    return str(int(string_num, 2))
   
data = []

#GPIO.setmode(GPIO.BCM)
PIN = port.PA6

gpio.init()
gpio.setcfg(PIN, gpio.OUTPUT)

gpio.output(PIN,gpio.HIGH)
sleep(0.025)
gpio.output(PIN,gpio.LOW)
sleep(0.02)

#gpio.setup(PIN, gpio.IN, pull_up_down=gpio.PUD_UP)
gpio.setcfg(PIN, gpio.INPUT)
gpio.pullup(PIN, 0)
gpio.pullup(PIN, gpio.PULLDOWN)
gpio.pullup(PIN, gpio.PULLUP)

for i in range(0,500):
    data.append(gpio.input(PIN))
   
bit_count = 0
tmp = 0
count = 0
HumidityBit = ""
TemperatureBit = ""
crc = ""


try:
   while data[count] == 1:
      tmp = 1
      count = count + 1
        

   for i in range(0, 32):
      bit_count = 0
      
      while data[count] == 0:
         tmp = 1
         count = count + 1

      while data[count] == 1:
         bit_count = bit_count + 1
         count = count + 1

      if bit_count > 3:
         if i>=0 and i<8:
            HumidityBit = HumidityBit + "1"
         if i>=16 and i<24:
            TemperatureBit = TemperatureBit + "1"
      else:
         if i>=0 and i<8:
            HumidityBit = HumidityBit + "0"
         if i>=16 and i<24:
            TemperatureBit = TemperatureBit + "0"
            
except:
   print "ERR_RANGE"
   exit(0)

   
try:
   for i in range(0, 8):
      bit_count = 0
      
      while data[count] == 0:
         tmp = 1
         count = count + 1

      while data[count] == 1:
         bit_count = bit_count + 1
         count = count + 1

      if bit_count > 3:
         crc = crc + "1"
      else:
         crc = crc + "0"
except:
   print "ERR_RANGE"
   exit(0)
      
      
Humidity = bin2dec(HumidityBit)
Temperature = bin2dec(TemperatureBit)

if int(Humidity) + int(Temperature) - int(bin2dec(crc)) == 0:
   print Humidity
   print Temperature
else:
   print "ERR_CRC"

In the meantime, as in the following photo: 

 
HayYkr2.jpg
 
Thanks

Hi,

 

I'm not fluent with pyA20 but I worked with DH11/DHT12 (before using onewire, si7201 or bme280 and never getting back)

 

I would remove all PULLUP or PULLDOWN from your code, Looking at the photo you don't use the bare sensor but an all-in-one -> I'm almost sure you already have an embedded pullup (between 1kΩ and 4kΩ so way better than the integrated ones) and you may also have a small decoupling cap as a bonus.

 

Did you try your pin with a simple led to check if you are using the good one ?

 

Back then I had a lot problem with the cpu speed, try to force a higher frequency (that will help all the sleeps to be more accurate) and try to kill all other daemon that you don't need.

I am using various DHT sensors. The one in picture indeed does have internal resistor. You can see it when loot at actual circuit board part.

I have one running on Raspberry Pi Zero for now about a half of a year using Java JNI to C bridge.
The DHT-11 fails quite often on read even with the 5 rereads cycle, the Linux is just too unreliable for the correct input counting.

 

On Arduino like ESP8266 there is no multithreading and the timing is therefore more accurate than on Linux installations.

It would be better using 1Wire sensor like DSDB1820 although at least on Raspberry Pi the whole 1Wire buss takes a lot of the CPU power as it always scans for new instances of the sensors.

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.