View a markdown version of this page

Menyiapkan Raspberry Pi dan sensor kelembaban - AWS IoT Core

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyiapkan Raspberry Pi dan sensor kelembaban

Masukkan kartu microSD Anda ke Raspberry Pi, sambungkan monitor, keyboard, mouse, dan, jika Anda tidak menggunakan Wi-Fi, kabel Ethernet. Jangan sambungkan kabel daya belum.

Hubungkan kabel jumper JST ke sensor kelembaban. Sisi lain jumper memiliki empat kabel:

  • Hijau: I2C SCL

  • Putih: I2C SDA

  • Merah: daya (3,5 V)

  • Hitam: tanah

Pegang Raspberry Pi dengan jack Ethernet di sebelah kanan. Dalam orientasi ini, ada dua baris pin GPIO di bagian atas. Hubungkan kabel dari sensor kelembaban ke baris bawah pin dengan urutan berikut. Mulai dari pin paling kiri, sambungkan merah (daya), putih (SDA), dan hijau (SCL). Lewati satu pin, lalu hubungkan kabel hitam (ground). Untuk informasi selengkapnya, lihat Pengkabel an Komputer Python.

Pasang kabel daya ke Raspberry Pi dan colokkan ujung lainnya ke soket dinding untuk menyalakannya.

Konfigurasikan Raspberry Pi Anda
  1. Pada Selamat datang di Raspberry Pi, pilih Ber ikutnya.

  2. Pilih negara, bahasa, zona waktu, dan tata letak keyboard Anda. Pilih Berikutnya.

  3. Masukkan kata sandi untuk Raspberry Pi Anda, lalu pilih Ber ikutnya.

  4. Pilih Wi-Fi jaringan Anda, lalu pilih Ber ikutnya. Jika Anda tidak menggunakan Wi-Fi jaringan, pilih Le wati.

  5. Pilih Berikutnya untuk memeriksa pembaruan perangkat lunak. Ketika pembaruan selesai, pilih Restart untuk memulai ulang Raspberry Pi Anda.

Setelah Raspberry Pi Anda dinyalakan, aktifkan antarmuka I2C.

  1. Di sudut kiri atas desktop Raspbian, klik ikon Raspberry, pilih P referensi, lalu pilih Konfigur asi Raspberry Pi.

  2. Pada tab Antar muka, untuk I2C, pilih Akti fkan.

  3. Pilih OK.

Perpustakaan untuk sensor kelembaban Adafruit STEMMA ditulis untuk. CircuitPython Untuk menjalankannya di Raspberry Pi, Anda perlu menginstal versi terbaru Python 3.

  1. Jalankan perintah berikut dari command prompt untuk memperbarui perangkat lunak Raspberry Pi Anda:

    sudo apt-get update

    sudo apt-get upgrade

  2. Jalankan perintah berikut untuk memperbarui instalasi Python 3 Anda:

    sudo pip3 install --upgrade setuptools

  3. Jalankan perintah berikut untuk menginstal pustaka Raspberry Pi GPIO:

    pip3 install RPI.GPIO

  4. Jalankan perintah berikut untuk menginstal pustaka Adafruit Blinka:

    pip3 install adafruit-blinka

    Untuk informasi selengkapnya, lihat Menginstal CircuitPython Perpustakaan di Raspberry Pi.

  5. Jalankan perintah berikut untuk menginstal pustaka Adafruit Seesaw:

    sudo pip3 install adafruit-circuitpython-seesaw

  6. Jalankan perintah berikut untuk menginstal AWS IoT Device SDK for Python:

    pip3 install AWSIoTPythonSDK

Raspberry Pi Anda sekarang memiliki semua pustaka yang diperlukan. Buat file yang disebut moistureSensor.py dan salin kode Python berikut ke dalam file:

from adafruit_seesaw.seesaw import Seesaw from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient from board import SCL, SDA import logging import time import json import argparse import busio # Shadow JSON schema: # # { # "state": { # "desired":{ # "moisture":<INT VALUE>, # "temp":<INT VALUE> # } # } # } # Function called when a shadow is updated def customShadowCallback_Update(payload, responseStatus, token): # Display status and data from update request if responseStatus == "timeout": print("Update request " + token + " time out!") if responseStatus == "accepted": payloadDict = json.loads(payload) print("~~~~~~~~~~~~~~~~~~~~~~~") print("Update request with token: " + token + " accepted!") print("moisture: " + str(payloadDict["state"]["reported"]["moisture"])) print("temperature: " + str(payloadDict["state"]["reported"]["temp"])) print("~~~~~~~~~~~~~~~~~~~~~~~\n\n") if responseStatus == "rejected": print("Update request " + token + " rejected!") # Function called when a shadow is deleted def customShadowCallback_Delete(payload, responseStatus, token): # Display status and data from delete request if responseStatus == "timeout": print("Delete request " + token + " time out!") if responseStatus == "accepted": print("~~~~~~~~~~~~~~~~~~~~~~~") print("Delete request with token: " + token + " accepted!") print("~~~~~~~~~~~~~~~~~~~~~~~\n\n") if responseStatus == "rejected": print("Delete request " + token + " rejected!") # Read in command-line parameters def parseArgs(): parser = argparse.ArgumentParser() parser.add_argument("-e", "--endpoint", action="store", required=True, dest="host", help="Your device data endpoint") parser.add_argument("-r", "--rootCA", action="store", required=True, dest="rootCAPath", help="Root CA file path") parser.add_argument("-c", "--cert", action="store", dest="certificatePath", help="Certificate file path") parser.add_argument("-k", "--key", action="store", dest="privateKeyPath", help="Private key file path") parser.add_argument("-p", "--port", action="store", dest="port", type=int, help="Port number override") parser.add_argument("-n", "--thingName", action="store", dest="thingName", default="Bot", help="Targeted thing name") parser.add_argument("-id", "--clientId", action="store", dest="clientId", default="basicShadowUpdater", help="Targeted client id") args = parser.parse_args() return args # Configure logging # AWSIoTMQTTShadowClient writes data to the log def configureLogging(): logger = logging.getLogger("AWSIoTPythonSDK.core") logger.setLevel(logging.DEBUG) streamHandler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') streamHandler.setFormatter(formatter) logger.addHandler(streamHandler) # Parse command line arguments args = parseArgs() if not args.certificatePath or not args.privateKeyPath: parser.error("Missing credentials for authentication.") exit(2) # If no --port argument is passed, default to 8883 if not args.port: args.port = 8883 # Init AWSIoTMQTTShadowClient myAWSIoTMQTTShadowClient = None myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient(args.clientId) myAWSIoTMQTTShadowClient.configureEndpoint(args.host, args.port) myAWSIoTMQTTShadowClient.configureCredentials(args.rootCAPath, args.privateKeyPath, args.certificatePath) # AWSIoTMQTTShadowClient connection configuration myAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime(1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout(10) # 10 sec myAWSIoTMQTTShadowClient.configureMQTTOperationTimeout(5) # 5 sec # Initialize Raspberry Pi's I2C interface i2c_bus = busio.I2C(SCL, SDA) # Intialize SeeSaw, Adafruit's Circuit Python library ss = Seesaw(i2c_bus, addr=0x36) # Connect to AWS IoT myAWSIoTMQTTShadowClient.connect() # Create a device shadow handler, use this to update and delete shadow document deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName(args.thingName, True) # Delete current shadow JSON doc deviceShadowHandler.shadowDelete(customShadowCallback_Delete, 5) # Read data from moisture sensor and update shadow while True: # read moisture level through capacitive touch pad moistureLevel = ss.moisture_read() # read temperature from the temperature sensor temp = ss.get_temp() # Display moisture and temp readings print("Moisture Level: {}".format(moistureLevel)) print("Temperature: {}".format(temp)) # Create message payload payload = {"state":{"reported":{"moisture":str(moistureLevel),"temp":str(temp)}}} # Update shadow deviceShadowHandler.shadowUpdate(json.dumps(payload), customShadowCallback_Update, 5) time.sleep(1)

Simpan file ke tempat Anda dapat menemukannya. J moistureSensor.py alankan dari baris perintah dengan parameter berikut:

titik akhir

Titik AWS IoT akhir kustom Anda. Untuk informasi selengkapnya, lihat REST API Bayangan Perangkat.

RootCA

Jalur lengkap ke sertifikat CA AWS IoT root Anda.

sertifikat

Jalur lengkap ke sertifikat AWS IoT perangkat Anda.

kunci

Jalur lengkap ke kunci pribadi sertifikat AWS IoT perangkat Anda.

Nama benda

Nama benda Anda (dalam hal ini,RaspberryPi).

clientId

ID klien MQTT. Gunakan RaspberryPi.

Baris perintah akan terlihat seperti ini:

python3 moistureSensor.py --endpoint your-endpoint --rootCA ~/certs/AmazonRootCA1.pem --cert ~/certs/raspberrypi-certificate.pem.crt --key ~/certs/raspberrypi-private.pem.key --thingName RaspberryPi --clientId RaspberryPi

Coba sentuh sensor, letakkan di penanam, atau masukkan ke dalam segelas air untuk melihat bagaimana sensor merespons berbagai tingkat kelembaban. Jika diperlukan, Anda dapat mengubah nilai ambang diMoistureSensorRule. Saat pembacaan sensor kelembaban berada di bawah nilai yang ditentukan dalam pernyataan kueri SQL aturan Anda, AWS IoT menerbitkan pesan ke topik Amazon SNS. Anda harus menerima pesan email yang berisi data kelembaban dan suhu.

Setelah Anda memverifikasi penerimaan pesan email dari Amazon SNS, tekan CTRL+C untuk menghentikan program Python. Tidak mungkin bahwa program Python akan mengirim pesan yang cukup untuk dikenakan biaya, tetapi ini adalah praktik terbaik untuk menghentikan program ketika Anda selesai.