145 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Go DHT22 / AM2302 / DHT11 interface
 | |
| 
 | |
| Golang DHT22 / AM2302 / DHT11 interface using periph.io driver
 | |
| 
 | |
| [](http://godoc.org/github.com/MichaelS11/go-dht)
 | |
| [](https://goreportcard.com/report/github.com/MichaelS11/go-dht)
 | |
| 
 | |
| 
 | |
| ## Please note
 | |
| 
 | |
| Please make sure to setup your DHT22 / AM2302 / DHT11 correctly. Do a search on the internet to find guide. Here is an example of a guide:
 | |
| 
 | |
| https://learn.adafruit.com/dht/connecting-to-a-dhtxx-sensor
 | |
| 
 | |
| The examples below are from using a Raspberry Pi 3 with GPIO 19 for the pin. Your setup may be different, if so, your pin names would need to change in each example.
 | |
| 
 | |
| Side note, in my testing the sensor has a fairly high level of read errors, suggest using ReadRetry or ReadBackground rather then just Read.
 | |
| 
 | |
| Tested on Raspberry Pi 3 with AM2302. Please open an issue if there are any issues.
 | |
| 
 | |
| 
 | |
| ## Get
 | |
| 
 | |
| go get github.com/MichaelS11/go-dht
 | |
| 
 | |
| 
 | |
| ## ReadRetry example
 | |
| 
 | |
| ```go
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/MichaelS11/go-dht"
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	err := dht.HostInit()
 | |
| 	if err != nil {
 | |
| 		fmt.Println("HostInit error:", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	dht, err := dht.NewDHT("GPIO19", dht.Fahrenheit, "")
 | |
| 	if err != nil {
 | |
| 		fmt.Println("NewDHT error:", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	humidity, temperature, err := dht.ReadRetry(11)
 | |
| 	if err != nil {
 | |
| 		fmt.Println("Read error:", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	fmt.Printf("humidity: %v\n", humidity)
 | |
| 	fmt.Printf("temperature: %v\n", temperature)
 | |
| }
 | |
| ```
 | |
| 
 | |
| 
 | |
| ## ReadBackground example
 | |
| 
 | |
| ```go
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/MichaelS11/go-dht"
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	err := dht.HostInit()
 | |
| 	if err != nil {
 | |
| 		fmt.Println("HostInit error:", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	dht, err := dht.NewDHT("GPIO19", dht.Fahrenheit, "")
 | |
| 	if err != nil {
 | |
| 		fmt.Println("NewDHT error:", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	stop := make(chan struct{})
 | |
| 	stopped := make(chan struct{})
 | |
| 	var humidity float64
 | |
| 	var temperature float64
 | |
| 
 | |
| 	// get sensor reading every 20 seconds in background
 | |
| 	go dht.ReadBackground(&humidity, &temperature, 20*time.Second, stop, stopped)
 | |
| 
 | |
| 	// should have at least read the sensor twice after 30 seconds
 | |
| 	time.Sleep(30 * time.Second)
 | |
| 
 | |
| 	fmt.Printf("humidity: %v\n", humidity)
 | |
| 	fmt.Printf("temperature: %v\n", temperature)
 | |
| 
 | |
| 	// to stop ReadBackground after done with reading, close the stop channel
 | |
| 	close(stop)
 | |
| 
 | |
| 	// can check stopped channel to know when ReadBackground has stopped
 | |
| 	<-stopped
 | |
| }
 | |
| ```
 | |
| 
 | |
| 
 | |
| ## Read example
 | |
| 
 | |
| ```go
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/MichaelS11/go-dht"
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	err := dht.HostInit()
 | |
| 	if err != nil {
 | |
| 		fmt.Println("HostInit error:", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	dht, err := dht.NewDHT("GPIO19", dht.Fahrenheit, "")
 | |
| 	if err != nil {
 | |
| 		fmt.Println("NewDHT error:", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	humidity, temperature, err := dht.Read()
 | |
| 	if err != nil {
 | |
| 		fmt.Println("Read error:", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	fmt.Printf("humidity: %v\n", humidity)
 | |
| 	fmt.Printf("temperature: %v\n", temperature)
 | |
| }
 | |
| ```
 |