Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Masukkan kartu microSD Anda ke Raspberry Pi, sambungkan monitor, keyboard, mouse, dan, jika Anda tidak menggunakan Wi-Fi, kabel Ethernet. Jangan sambungkan kabel daya dulu.
Hubungkan kabel jumper JST ke sensor kelembaban. Sisi lain dari 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 (power), putih (SDA), dan hijau (SCL). Lewati satu pin, lalu hubungkan kabel hitam (ground). Untuk informasi selengkapnya, lihat Pengkabelan Komputer Python
Pasang kabel daya ke Raspberry Pi dan colokkan ujung lainnya ke stopkontak untuk menyalakannya.
Konfigurasikan Raspberry Pi Anda
-
Pada Selamat Datang di Raspberry Pi, pilih Berikutnya.
-
Pilih negara, bahasa, zona waktu, dan tata letak keyboard Anda. Pilih Berikutnya.
-
Masukkan kata sandi untuk Raspberry Pi Anda, lalu pilih Berikutnya.
-
Pilih jaringan Wi-Fi Anda, lalu pilih Berikutnya. Jika Anda tidak menggunakan jaringan Wi-Fi, pilih Lewati.
-
Pilih Berikutnya untuk memeriksa pembaruan perangkat lunak. Ketika pembaruan selesai, pilih Restart untuk memulai ulang Raspberry Pi Anda.
Setelah Raspberry Pi Anda dimulai, aktifkan antarmuka I2C.
-
Di sudut kiri atas desktop Raspbian, klik ikon Raspberry, pilih Preferences, dan kemudian pilih Raspberry Pi Configuration.
-
Pada tab Antarmuka, untuk I2C, pilih Aktifkan.
-
Pilih OK.
Perpustakaan untuk sensor kelembaban Adafruit STEMMA ditulis untuk. CircuitPython Untuk menjalankannya di Raspberry Pi, Anda perlu menginstal versi terbaru Python 3.
-
Jalankan perintah berikut dari prompt perintah untuk memperbarui perangkat lunak Raspberry Pi Anda:
sudo apt-get update
sudo apt-get upgrade
-
Jalankan perintah berikut untuk memperbarui instalasi Python 3 Anda:
sudo pip3 install --upgrade setuptools
-
Jalankan perintah berikut untuk menginstal perpustakaan Raspberry Pi GPIO:
pip3 install RPI.GPIO
-
Jalankan perintah berikut untuk menginstal perpustakaan Adafruit Blinka:
pip3 install adafruit-blinka
Untuk informasi selengkapnya, lihat Menginstal CircuitPython Pustaka di Raspberry Pi
. -
Jalankan perintah berikut untuk menginstal perpustakaan Adafruit Seesaw:
sudo pip3 install adafruit-circuitpython-seesaw
-
Jalankan perintah berikut untuk menginstal AWS IoT Device SDK untuk Python:
pip3 install AWSIoTPythonSDK
Raspberry Pi Anda sekarang memiliki semua pustaka yang diperlukan. Buat file bernama 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. Jalankan moistureSensor.py
dari baris perintah dengan parameter berikut:
- titik akhir
-
AWS IoT Titik akhir kustom Anda. Untuk informasi selengkapnya, lihat Device Shadow REST API.
- 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.
- thingName
-
Nama barang 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 kelembapan. Jika diperlukan, Anda dapat mengubah nilai ambang batas 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 program Python akan mengirim pesan yang cukup untuk dikenakan biaya, tetapi ini adalah praktik terbaik untuk menghentikan program ketika Anda selesai.