- การติดตั้ง AWS IOT Device SDK สำหรับ Python บน Raspberry Pi:
- แผนภูมิวงจรรวม:
- การเขียนโปรแกรม Raspberry Pi ของคุณ:
- การทดสอบโปรแกรม python ผ่าน Shell Window:
- การทำงาน:
Raspberry Pi เป็นตัวเลือกแรกสำหรับการพัฒนาแอพพลิเคชั่นที่ใช้ IoT หากเกี่ยวข้องกับการคำนวณในระดับหนึ่ง ด้วยความยืดหยุ่นของ python และชุมชนนักพัฒนาที่แข็งแกร่งจึงเป็นเรื่องง่ายมากที่จะรวบรวมบันทึกวิเคราะห์หรือรายงานชุดข้อมูลโดยใช้ Pi ในการกวดวิชานี้เราจะมาเรียนรู้วิธีการผสมผสานในอำนาจของราสเบอร์รี่ Pi กับบริการ Amazon AWS ในการเผยแพร่ข้อมูลออนไลน์กับอินเทอร์เน็ต
ในการกวดวิชานี้เราจะใช้เซ็นเซอร์ DHT11การอ่านค่าของอุณหภูมิและความชื้นสัมพัทธ์แล้วเชื่อมต่อกับบริการ AWS IOT และปรับปรุงค่าเซ็นเซอร์โดยใช้AWS IOT SDK จากนั้นข้อมูลนี้สามารถมองเห็นได้ในคอนโซล Amazon IOT เพื่อให้แน่ใจว่าเราได้รับข้อมูลที่เผยแพร่ไปยังอินเทอร์เน็ต
คุณยังสามารถใช้AWS Elastic Search Serviceเพื่อดึงเซ็นเซอร์เหล่านี้และจัดเก็บไว้ในฐานข้อมูลจากนั้นใช้บริการKibana Dashboardเพื่อแสดงภาพข้อมูลเซ็นเซอร์เป็นกราฟที่พล็อตอย่างเรียบร้อย น่าสนใจพอมั้ย !!! มาเริ่มกันเลย…
ข้อกำหนดเบื้องต้น:
บทช่วยสอนนี้จะถือว่าคุณได้สร้างบัญชี AWS ฟรีแล้วและทราบข้อมูลพื้นฐานเกี่ยวกับบริการ AWS IoT เช่นการสร้างสิ่งของใบรับรองนโยบายและการเผยแพร่คุณค่าโดยใช้ หากเป็นอย่างอื่นอ่านบทแนะนำด้านล่าง
- เริ่มต้นใช้งาน Amazon AWS IOT ด้วย MQTT.fx
นอกจากนี้ยังถือว่าคุณรู้วิธีเชื่อมต่อเซ็นเซอร์ LCD และ DHT11 กับ Raspberry Pi และไลบรารีสำหรับการทำเช่นเดียวกันนั้นได้รับการติดตั้งบน Pi ถ้าไม่ทำตามบทช่วยสอนด้านล่าง
- การเชื่อมต่อ DHT11 กับ Raspberry Pi
ในตอนท้ายของบทช่วยสอนข้างต้นคุณจะต้องสร้างสิ่งต่างๆบน AWS-IOT และคุณควรมีที่อยู่นายหน้าสำหรับสิ่งของของคุณพร้อมกับใบรับรองที่จำเป็นในการเข้าถึงสิ่งของของคุณ นอกจากนี้เรายังถือว่า Raspberry pi ของคุณได้รับการตั้งค่าระบบปฏิบัติการแล้วและเชื่อมต่อกับอินเทอร์เน็ต ด้วยสิ่งเหล่านี้เรามาดูบทช่วยสอนกัน หากคุณยังใหม่กับ Raspberry Pi ให้ไปที่การเริ่มต้นใช้งาน Raspberry pi ก่อน
การติดตั้ง AWS IOT Device SDK สำหรับ Python บน Raspberry Pi:
ในการใช้บริการ AWS บน Pi เราสามารถติดตั้ง SDK สองตัวใดก็ได้ หนึ่งคือ JavaScript SDK ซึ่งใช้ JavaScript เป็นภาษาโปรแกรมและอีกอันคือ Python SDK ซึ่งใช้ python เป็นภาษาโปรแกรม ที่นี่เรากำลังเลือก Python เป็น SDK ของเราเนื่องจากเราคุ้นเคยกับ Python มากกว่า JavaScript เล็กน้อย
ข้อมูลทั้งหมดเกี่ยวกับ AWS IOT SDK มีอยู่ในหน้า GitHub
ขั้นตอนที่ 1:ในการติดตั้ง SDK บน Pi ของคุณให้เปิดเทอร์มินัลจากนั้นพิมพ์คำสั่งต่อไปนี้
git clone
ขั้นตอนที่ 2:ควรติดตั้งไดเร็กทอรี aws บน Pi ของคุณตอนนี้ไปที่มันโดยใช้คำสั่งต่อไปนี้
cd AWS - IOT -device- SDK -python
ขั้นตอนที่ 3:ภายในไดเร็กทอรีให้ติดตั้งไฟล์ติดตั้งโดยใช้บรรทัดด้านล่าง
python setup.py ติดตั้ง
แผนภูมิวงจรรวม:
ในด้านฮาร์ดแวร์ที่เรามีราสเบอร์รี่ Pi เชื่อมต่อกับ DHT11 เซนเซอร์และหน้าจอแอลซีดี DHT11 ใช้เพื่อรับค่าอุณหภูมิและความชื้นและ LCD ใช้เพื่อแสดงค่าและข้อมูลการยกเลิกการบั๊ก แผนภาพวงจรสำหรับสิ่งเดียวกันแสดงอยู่ด้านล่าง
ทั้งเซ็นเซอร์ LCD และ DHT11ทำงานร่วมกับแหล่งจ่ายไฟ + 5V ดังนั้นเราจึงใช้หมุด 5V บน Raspberry Pi เพื่อจ่ายไฟทั้งคู่ ตัวต้านทานแบบดึงขึ้นที่มีค่า 1k ใช้กับขาเอาต์พุตของเซ็นเซอร์ DHT11 หากคุณใช้โมดูลคุณสามารถหลีกเลี่ยงตัวต้านทานนี้ได้
หม้อจอนของ 10kจะถูกเพิ่มในขาวีของจอแอลซีดีในการควบคุมระดับความคมชัดของจอแอลซีดี นอกเหนือจากนั้นการเชื่อมต่อทั้งหมดนั้นค่อนข้างตรงไปตรงมา แต่โปรดสังเกตว่าคุณใช้พิน GPIO ตัวใดในการเชื่อมต่อพินเนื่องจากเราจะต้องใช้ในโปรแกรมของเรา แผนภูมิด้านล่างนี้จะช่วยให้คุณสามารถหาหมายเลขพิน GPIO ได้
ใช้แผนภูมิและทำการเชื่อมต่อของคุณตามแผนภาพวงจร ฉันใช้เขียงหั่นขนมและสายจัมเปอร์เพื่อทำการเชื่อมต่อ เนื่องจากฉันใช้โมดูลฉันจึงต่อสายเข้ากับ Raspberry Pi โดยตรง ฮาร์ดแวร์ของฉันมีลักษณะดังนี้ด้านล่าง
การเขียนโปรแกรม Raspberry Pi ของคุณ:
ในโปรแกรม python ของเราเราต้องอ่านค่าของอุณหภูมิและความชื้นแสดงบนหน้าจอ LCD และเผยแพร่ทั้งสองค่าไปยังสิ่ง Amazon IOTที่เราได้สร้างไว้แล้วในบทช่วยสอนก่อนหน้านี้ ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้สร้างสิ่งนี้และคุณมีไฟล์สำคัญทั้งสามไฟล์และที่อยู่นายหน้าของสิ่งที่คุณสร้างขึ้น
ในโปรแกรม pythonของเราเราต้องเชื่อมโยงไฟล์สำคัญสามไฟล์เพื่อให้ Raspberry Pi สามารถเข้าถึงเพื่อเผยแพร่ค่าในสิ่งของของเราได้ ดังนั้นคัดลอกไฟล์สำคัญทั้งสามไฟล์และวางลงบนเดสก์ท็อปของ Raspberry pi ของคุณเนื่องจากเราต้องการที่อยู่พา ธ ในโปรแกรมของเรา
โปรแกรมหลามสมบูรณ์สามารถพบได้ที่ด้านล่างของหน้านี้คุณสามารถใช้โปรแกรมหลังจากการแก้ไขอยู่โบรกเกอร์และไดเรกทอรีเส้นทางตามสิ่งที่คุณสร้างขึ้น ต่อไปฉันได้อธิบายรหัสในตัวอย่างเล็ก ๆ
เราเริ่มต้นด้วยการนำเข้าไลบรารีที่จำเป็นสำหรับโครงการของเรา ไลบรารีหลักสามไลบรารีคือ AWS SDK ไลบรารี LCD และ DHT Library ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Pi ทั้งสามแล้ว เวลา และ วันที่และเวลา ห้องสมุดจะถูกติดตั้งโดยค่าเริ่มต้น
จากการนำเข้า AWSIoTPythonSDK.MQTTLib AWSIoTMQTTClient #import จาก AWS-IOT ห้องสมุด เวลานำเข้า # เพื่อสร้างความล่าช้า จากdatetime วันที่นำเข้าdatetime #To ได้รับวันและเวลา นำเข้า Adafruit_CharLCD เป็นจอแอลซีดีจอแอลซีดี #import ห้องสมุด นำเข้า Adafruit_DHT #import DHT ห้องสมุดสำหรับเซ็นเซอร์
ในบรรทัดถัดไปเราจะต้องให้รายละเอียดสิ่งที่ชอบอยู่นายหน้าชื่อลูกค้าและเส้นทางไปยังใบรับรองและไฟล์ที่สำคัญที่นี่ฉันใช้ชื่อไคลเอ็นต์เป็น new_Client คุณสามารถใช้ชื่อเดิมหรือชื่อใดก็ได้ที่คุณเลือก ควรเปลี่ยนที่อยู่นายหน้าเป็นที่อยู่ของสิ่งที่คุณสร้างขึ้นและควรเปลี่ยนไดเรกทอรีเส้นทางตามสิ่งที่คุณทำ นอกเหนือจาก 2 สิ่งนี้คุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรในบรรทัดต่อไปนี้
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pi / ใบรับรอง / ESP32. "/ home / pi / Desktop / ESP32_Thing ใบรับรอง / private.pem.key", "/ home / pi / Desktop / ESP32_Thing ใบรับรอง / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Infinite Offline เผยแพร่การจัดคิว myMQTTClient configDrainingFrequency (2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 วินาทีmyMQTTClient.configureMQTTOperationTimeout (5) # 5 วินาที
ต่อไปเราจะต้องระบุรายละเอียดของการเชื่อมต่อขาของเราหมายเลขพิน GPIO ของแต่ละพินจะถูกจัดสรรให้กับชื่อตามลำดับ ที่นี่เราใช้เซ็นเซอร์ DHT ที่พิน 17 และ LCD ในโหมด 4 บิต รหัสเดียวกันแสดงอยู่ด้านล่าง
sensor_name = Adafruit_DHT.DHT11 # เราใช้ DHT11 sensor sensor_pin = 17 # เซ็นเซอร์เชื่อมต่อกับ GPIO17 บน Pi lcd_rs = 7 #RS ของ LCD เชื่อมต่อกับ GPIO 7 บน PI lcd_en = 8 #EN ของ LCD เชื่อมต่อกับ GPIO 8 บน PI lcd_d4 = 25 # D4 ของ LCD เชื่อมต่อกับ GPIO 25 บน PI lcd_d5 = 24 # D5 ของ LCD เชื่อมต่อกับ GPIO 24 บน PI lcd_d6 = 23 # D6 ของ LCD เชื่อมต่อกับ GPIO 23 บน PI lcd_d7 = 18 # D7 ของ LCD เชื่อมต่อกับ GPIO 18 บน PI lcd_backlight = 0 #LED ไม่ได้เชื่อมต่อดังนั้นเราจึงกำหนดให้เป็น 0
จากนั้นเราเริ่มต้น LCD และแสดงข้อความบทนำเล็ก ๆ บนหน้าจอหลังจากนั้นเราจะพยายามเชื่อมต่อกับสิ่ง AWS โดยใช้ที่อยู่นายหน้าและไฟล์คีย์ที่ป้อนด้านบน หากการเชื่อมต่อสำเร็จจอ LCD จะแสดงข้อความ“ Connected to AWS thing ” หรือจะลองเป็นเวลา 10 วินาทีและหากล้มเหลวจะแสดงข้อความ Error หากคุณได้รับข้อความแสดงข้อผิดพลาดตรวจสอบให้แน่ใจว่าคุณได้สร้างสิ่งนี้สำเร็จและได้เชื่อมโยงกับรหัสอย่างถูกต้อง คุณสามารถย้อนกลับไปที่บทช่วยสอนก่อนหน้านี้ได้ตลอดเวลาเพื่อดูว่าคุณสร้างสิ่งนั้นอย่างถูกต้องใน AWS หรือไม่
ถ้า time.time () <connected_time: # ลองเชื่อมต่อกับ AWS เป็นเวลา 10 วินาที myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) พิมพ์ "MQTT Client connection success!" lcd.message ('Connected to \ n AWS thing') #if connected else: print "Error: ตรวจสอบรายละเอียด AWS ของคุณในโปรแกรม" lcd.message ('Error: \ nInvalid details') # หากไม่ได้เชื่อมต่อ
เมื่อเชื่อมต่อคือการประสบความสำเร็จเราใส่ลงไปไม่มีที่สิ้นสุด ในขณะที่ วงเผยแพร่คุณค่าของเวลา, อุณหภูมิและความชื้นเป็นน้ำหนักบรรทุก payload ที่นี่ควรเป็นสตริงในรูปแบบ JSON เสมอ ก่อนอื่นเราต้องอ่านวันที่และเวลาปัจจุบันและบันทึกไว้ในตัวแปรโดยใช้บรรทัดด้านล่าง
now = datetime.utcnow () # รับวันที่และเวลา current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') # รับเวลาปัจจุบันในรูปแบบสตริง
จากนั้นเราจะอ่านค่าความชื้นและอุณหภูมิจากเซ็นเซอร์ DHT11 และแสดงบนหน้าจอ LCD ความชื้นและอุณหภูมิที่แปรผันจะยึดค่าความชื้นและอุณหภูมิตามลำดับ
ความชื้นอุณหภูมิ = Adafruit_DHT.read_retry (sensor_name, sensor_pin) # อ่านจากเซ็นเซอร์
และบันทึกค่าตามลำดับในตัวแปรอุณหภูมิและความชื้น
lcd.clear () # ล้างหน้าจอ LCD lcd.message ('Temp =%.1f C'% อุณหภูมิ) # แสดงค่าของอุณหภูมิ lcd.message ('\ nHum =%.1f %%'% ความชื้น) #Display ค่าของ Humidity time.sleep (2) # รอ 2 วินาทีจากนั้นอัปเดตค่า
อย่างที่บอกไปก่อนหน้านี้น้ำหนักบรรทุกควรอยู่ในรูปแบบของสตริงที่มีวงเล็บปีกกาล้อมรอบเราผนวกค่าของวันที่เวลาอุณหภูมิและความชื้นหลังจากแปลงตัวแปรเป็นสตริงดังที่แสดงด้านล่าง
# จัดเตรียมเพย์โหลดในรูปแบบสตริง payload = '{"timestamp": "' + current_time + '", "temperature":' + str (อุณหภูมิ) + ', "ความชื้น":' + str (ความชื้น) + '}'
ในที่สุดเมื่อ payload พร้อมแล้วเราต้องเผยแพร่ไปยัง MQTT Client สามารถทำได้โดยใช้คำสั่ง myMQTTclient.publish ในขณะที่เผยแพร่ไปยังสิ่งที่เราควรตั้งชื่อที่นี่ฉันได้ตั้งชื่อว่า DHT11 / data แต่คุณสามารถตั้งชื่ออะไรก็ได้ที่คุณต้องการ แต่ให้แน่ใจว่าคุณจำชื่อได้เนื่องจากเราจะต้องสมัครสมาชิกจากสิ่งของเราเพื่อดูข้อมูล
การทดสอบโปรแกรม python ผ่าน Shell Window:
เมื่อโปรแกรมพร้อมแล้วให้เปิดใช้งานโดยใช้ตัวเลือกของคุณ ฉันใช้ Python IDE เพื่อเปิดโปรแกรมบนหน้าต่างเชลล์ หากทุกอย่างเรียบร้อยคุณจะได้รับการเชื่อมต่อข้อความสำเร็จและ payload ทั้งหมดควรจะแสดงบนหน้าต่าง คุณสามารถตรวจสอบได้ว่าอ่านค่าอุณหภูมิและความชื้นถูกต้องหรือไม่ เพย์โหลดจะอัปเดตทุกๆ 5 วินาที หน้าต่างเชลล์จะมีลักษณะดังนี้ด้านล่าง
หากคุณมีปัญหาใด ๆ ตรวจสอบให้แน่ใจว่าคุณได้ระบุรายละเอียดคีย์และที่อยู่นายหน้าที่ถูกต้องแล้วตรวจสอบด้วยว่าสิ่งนั้นสามารถเชื่อมต่อกับซอฟต์แวร์ MQTT.fx ได้หรือไม่ หากเชลล์แสดงการเชื่อมต่อไคลเอ็นต์ MQTT สำเร็จและแฮงค์ที่นั่นหมายความว่าเซ็นเซอร์ DHT11 ไม่ตอบสนองให้ตรวจสอบว่าคุณเชื่อมต่อกับพินที่ถูกต้องและเซ็นเซอร์ทำงานหรือไม่
การทำงาน:
เมื่อคุณเปิดโปรแกรมและได้รับรายละเอียดข้างต้นบนหน้าต่างเปลือกมันหมายถึงโปรแกรมที่มีการตอบสนองอย่างถูกต้องและค่าจะถูกอัปโหลดไปยังเซิร์ฟเวอร์ของ Amazon AWS คุณยังสามารถสังเกตเห็นหน้าจอ LCD เพื่อตรวจสอบว่า เผยแพร่ไปยัง AWS-IoT ทุก ๆ 5 วินาทีดังที่แสดงด้านล่าง
เราจะได้รับในการประยุกต์ใช้ MQTT.fx และสมัครหัวข้อDHT11 / ข้อมูล จากนั้นเราควรจะสามารถรับข้อมูลทั้งหมดที่กำลังเผยแพร่โดย Raspberry Pi ข้อมูลนี้จะได้รับการอัปเดตทุกๆ 5 วินาที หน้าจอ MQTT ของคุณจะมีลักษณะดังนี้ด้านล่าง
ดังที่คุณเห็นว่ากำลังรับน้ำหนักบรรทุกบนซอฟต์แวร์ MQTT โดยเน้นด้วยสีน้ำเงิน คุณยังสามารถดูวิดีโอด้านล่างเพื่อทราบว่าโครงการทำงานอย่างไร ตั้งแต่ตอนนี้เรามีข้อมูลของเราบนอินเทอร์เน็ตเราจึงสามารถใช้มันกับเครื่องมืออื่น ๆ ที่ Amazon จัดเตรียมไว้ให้เช่น Elastic search และ Lambda เพื่อบันทึกข้อมูลในฐานข้อมูลหรือแสดงภาพจากกราฟ มีแอปพลิเคชั่นอื่น ๆ อีกมากมายขึ้นอยู่กับว่าเราต้องได้รับประโยชน์จากข้อมูลอย่างไร
หวังว่าคุณจะเข้าใจบทช่วยสอนและสนุกกับการสร้างสิ่งที่คล้ายกันหากคุณมีปัญหาในการทำสิ่งนี้ให้โพสต์ไว้ในส่วนความคิดเห็นด้านล่างหรือใช้ฟอรัมเพื่อขอความช่วยเหลือด้านเทคนิค