Arduino-Code und Video für den digitalen Temperatur- und Feuchtigkeitssensor Aosong AM2320 mit LCD1602 und I2C-Modul
In diesem Tutorial werden wir untersuchen, wie man den digitalen Temperatur- und Feuchtigkeitssensor Aosong AM2320 zusammen mit einem LCD1602-Display mit I2C-Modul verwendet. Ziel ist es, die Temperatur sowohl in Fahrenheit als auch in Celsius sowie die relative Luftfeuchtigkeit anzuzeigen. Diese Konfiguration eignet sich ideal zur Überwachung von Umweltbedingungen in verschiedenen Projekten und ist eine vielseitige Ergänzung für Ihren Arduino-Werkzeugkasten.

Wir werden den AM2320-Sensor verwenden, um Temperatur- und Feuchtigkeitsdaten zu erfassen, die anschließend auf dem LCD1602 angezeigt werden. Das I2C-Modul vereinfacht die Verkabelung und benötigt nur vier Verbindungen: VCC, GND, SDA und SCL. Für ein klares Verständnis der Verkabelung und Programmierung empfehle ich, das zugehörige Video anzusehen (im Video bei 00:00).
Hardware erklärt
Die wichtigsten Komponenten dieses Projekts sind der AM2320-Sensor, das LCD1602-Display und das I2C-Modul. Der AM2320 ist ein digitaler Sensor, der über eine I2C-Schnittstelle genaue Messwerte für Temperatur und Luftfeuchtigkeit liefert. Er arbeitet bei einer Spannung von 3.3V bis 5.5V und hat einen Messbereich von -40°C bis +80°C für die Temperatur und 0% bis 100% für die Luftfeuchtigkeit.
Das LCD1602-Display ermöglicht die Anzeige der Sensormesswerte. Es ist ein 16x2-Zeichen-Display, das über das I2C-Protokoll kommuniziert, wodurch die Anzahl der erforderlichen Verbindungen auf nur vier reduziert wird. Das I2C-Modul wandelt die parallelen Daten des LCD in ein serielles Format um, wodurch die Verbindung zum Arduino erleichtert wird.
Details zum Datenblatt
| Hersteller | Aosong |
|---|---|
| Teilenummer | AM2320 |
| Logik-/I/O-Spannung | 3.3 V - 5.5 V |
| Versorgungsspannung | 3.3 V - 5.5 V |
| Ausgangsstrom | ≤ 1,5 mA |
| Messbereich (Temperatur) | -40 °C bis +80 °C |
| Messbereich (Feuchtigkeit) | 0 % bis 100 % |
| Antwortzeit | ≤ 2 s |
| Paket | DIP-4 |
| Notizen / Varianten | Pull-up-Widerstände werden für I2C-Verbindungen empfohlen. |
- Stellen Sie sicher, dass die Stromversorgung im angegebenen Spannungsbereich erfolgt.
- Verwenden Sie Pull-up-Widerstände (4,7 kΩ empfohlen) für die SDA- und SCL-Leitungen.
- Überprüfen Sie die korrekte I2C-Adresse (Standard ist 0x27 für die meisten LCDs).
- Behandeln Sie potenzielle Fehler, indem Sie den Fehlercode des Sensors prüfen.
- Löschen Sie das LCD, bevor Sie neue Messwerte anzeigen, um Überlappungen zu vermeiden.
Verdrahtungsanleitung

Um den AM2320-Sensor zu verdrahten, verbinden Sie den linken Pin (VCC) mit 5V am Arduino. Der zweite Pin (SDA) wird mit dem A4-Pin eines Arduino Uno (oder Pin 20 bei einem Mega) verbunden. Der dritte Pin (GND) sollte mit der Masse verbunden werden, und der vierte Pin (SCL) wird mit dem A5-Pin eines Arduino Uno (oder Pin 21 bei einem Mega) verbunden. Zusätzlich verbinden Sie einen 4.7kΩ-Widerstand zwischen dem SDA-Pin und 5V und einen weiteren 4.7kΩ-Widerstand zwischen dem SCL-Pin und 5V, um die richtigen Signalpegel sicherzustellen.
Beim LCD1602-Display mit I2C verbinden Sie den VCC-Pin mit 5V und den GND-Pin mit Masse. Verbinden Sie den SDA-Pin des LCD mit demselben SDA-Pin (A4), der für den Sensor verwendet wird. Ebenso verbinden Sie den SCL-Pin des LCD mit demselben SCL-Pin (A5), der für den Sensor verwendet wird. Diese gemeinsame Verkabelung ermöglicht es beiden Geräten, über denselben I2C-Bus zu kommunizieren.
Codebeispiele und Schritt-für-Schritt-Anleitung
Der folgende Code initialisiert den AM2320-Sensor und das LCD1602-Display. Er beginnt damit, die notwendigen Bibliotheken einzubinden und eine Instanz des Sensors zu erstellen.
#include
AM2320 sensor;
#include
LiquidCrystal_I2C lcd(0x27, 16, 2); Hier, der/die/dassensorEin Objekt wird aus der AM2320-Bibliothek erstellt, und daslcdDas Objekt wird mit der I2C‑Adresse des Displays initialisiert.
Imsetup()In der Funktion initialisieren wir sowohl den Sensor als auch das LCD. Dies umfasst das Einschalten der Hintergrundbeleuchtung und das Ausgeben einer Anfangsnachricht.
void setup() {
sensor.begin();
lcd.begin();
lcd.backlight();
lcd.print("Robojax AM2320 ");
lcd.setCursor (0,1);
lcd.print("LCD1602 I2C Demo");
delay(3000);
}Dieser Code richtet die Anzeige so ein, dass eine Willkommensnachricht für 3 Sekunden angezeigt wird und dem Benutzer Zeit gibt zu sehen, dass das System gerade initialisiert wird.
Derloop()Die Funktion prüft kontinuierlich, ob Sensormessungen vorliegen, und aktualisiert die Anzeige entsprechend. Wenn eine Messung verfügbar ist, löscht sie den Bildschirm und zeigt die Temperatur sowohl in Fahrenheit als auch in Celsius sowie die relative Luftfeuchtigkeit an.
void loop() {
if (sensor.measure()) {
lcd.clear();
lcd.print("T:");
lcd.print(temp('F'));
lcd.print("F/");
lcd.print(temp('C'));
lcd.print("C");
lcd.setCursor (0,1);
lcd.print("R.H. :");
lcd.print(sensor.getHumidity());
lcd.print("%");
}
else {
int errorCode = sensor.getErrorCode();
switch (errorCode) {
case 1: lcd.print("ERR: Sensor offline"); break;
case 2: lcd.print("ERR: CRC failed."); break;
}
}
delay(500);
}Dieser Auszug zeigt, wie das Programm die Sensordaten abruft und anzeigt, während es mögliche Fehler behandelt, indem es dieerrorCode.
Demonstration / Was Sie erwartet
Wenn die Einrichtung abgeschlossen ist, zeigt das LCD voraussichtlich die Temperatur sowohl in Fahrenheit als auch in Celsius sowie die relative Luftfeuchtigkeit in Prozent an. Wenn der Sensor offline ist oder ein CRC-Fehler vorliegt, zeigt das Display entsprechende Fehlermeldungen an. Es ist wichtig, dass alle Verbindungen sicher sind, um Probleme zu vermeiden (im Video bei 02:45).
Video-Zeitstempel
- 00:00- Einführung in das Projekt
- 01:30- Verdrahtungsanleitung
- 03:15- Code-Erklärung
- 04:45- Demonstration der Funktionalität
++
/**
* This is Arduino code for AM2320 Temperature and Humidity Sensor with LCD1602 and I2C Module
* which displays the temperature and RH (relative humidity)
* on an LCD1602 with an I2C module. The code was combined by Robojax.
*
Original Code For AM2320 :https://github.com/hibikiledo/AM2320
Copyright 2016 Ratthanan Nalintasnai
Modified for Robojax.com video by
Ahmad S. on March 22, 2018 at 23:55 in Ajax, Ontario, Canada
This code, with library and other codes, is available at
https://robojax.com
Watch the video instruction for this code: https://youtu.be/ym567hneDpE
**/
// Include library for AM2320
#include <AM2320.h>
// Create an instance of the sensor
AM2320 sensor;
#include <Wire.h>
// Include the LiquidCrystal library for display
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Call sensor.begin() to initialize the library
sensor.begin();
// Robojax code for LCD with I2C
// Initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
lcd.print("Robojax AM2320 ");
lcd.setCursor (0,1);
lcd.print("LCD1602 I2C Demo");
delay(3000);
}
void loop() {
if (sensor.measure()) {
lcd.clear();
lcd.print("T:");
lcd.print(temp('F'));
lcd.print("F/");
lcd.print(temp('C'));
lcd.print("C");
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print("R.H. :");
lcd.print(sensor.getHumidity());
lcd.print("%");
}
else { // An error has occurred
int errorCode = sensor.getErrorCode();
switch (errorCode) {
case 1: lcd.print("ERR: Sensor offline"); break;
case 2: lcd.print("ERR: CRC failed."); break;
}
}
delay(500);
}
/*
* temp()
* Returns the temperature based on the input character T.
* If T == 'F', converts Celsius to Fahrenheit.
* Otherwise, returns Celsius.
* How to use:
* To get Fahrenheit, use temp('F').
* To get Celsius, use temp('C') or temp('').
* temp('') uses an empty single quote.
*
*/
float temp(char T)
{
if (sensor.measure()) {
if(T =='F')
{
// Convert to FAHRENHEIT and return
// Robojax video tutorial
return sensor.getTemperature()* 1.8 + 32;
}else{
return sensor.getTemperature();// Return CELSIUS
}
}// if sensor.measure
}
/*********************************************************************
Original source: http://playground.arduino.cc/Main/I2cScanner
This program will find the I2C address on the I2C device. Just upload the code into your Arduino
and open the serial monitor and wait. It will display the I2C address as 0x3C or similar.
* Please view other RoboJax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The I2C scanner uses the return value of
// the Wire.endTransmission to see if
// a device did acknowledge the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
Dinge, die Sie vielleicht brauchen
-
Amazon
-
AliExpressKaufen Sie den AM2302-, DHT11- oder DHT22-Sensor bei AliExpress.s.click.aliexpress.com
Ressourcen & Referenzen
-
ExternAM2320 Bibliothek (von GitHub)github.com
-
ExternArduino Draht Dokumentationsseitearduino.cc
Dateien📁
Datenblatt (pdf)
-
Adafruit-AM2320-Temperatur- und Feuchtigkeitssensor I2C Benutzerhandbuch
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
Fritzing-Datei
-
AM2320 Feuchtigkeits- und Temperatursensor
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB