สารบัญ:
- ขั้นตอนที่ 1: BoM - บิลวัสดุ
- ขั้นตอนที่ 2: Hw
- ขั้นตอนที่ 3: Micropython, REPL, Jupyter
- ขั้นตอนที่ 4: เซ็นเซอร์
- ขั้นตอนที่ 5: จับและแสดงข้อมูลเซ็นเซอร์ทั้งหมดภายในเครื่อง
- ขั้นตอนที่ 6: เรียกใช้ Local Station Code บน ESP Start-up
- ขั้นตอนที่ 7: เชื่อมต่อ ESP กับ Local WiFi
- ขั้นตอนที่ 8: The ThingSpeak
- ขั้นตอนที่ 9: โปรโตคอล MQTT และการเชื่อมต่อ ThingSpeak
- ขั้นตอนที่ 10: ตัวบันทึกข้อมูลเซ็นเซอร์
- ขั้นตอนที่ 11: แอพ ThingView
- ขั้นตอนที่ 12: บทสรุป
วีดีโอ: IoT ทำได้ง่าย: ESP-MicroPython-MQTT-ThingSpeak: 12 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
ในบทช่วยสอนก่อนหน้าของฉัน MicroPython บน ESP โดยใช้ Jupyter เราได้เรียนรู้วิธีติดตั้งและเรียกใช้ MicroPython บนอุปกรณ์ ESP การใช้ Jupyter Notebook เป็นสภาพแวดล้อมการพัฒนาของเรา เรายังได้เรียนรู้วิธีการอ่านจากเซ็นเซอร์ (อุณหภูมิ ความชื้น และความส่องสว่าง) เราใช้โปรโตคอลและวิธีการสื่อสารที่หลากหลาย อนาล็อก ดิจิตอล 1-Wire และ I2C ซึ่งเป็นอันสุดท้ายที่จะแสดงการบันทึกของเรา ข้อมูลบนจอแสดงผล OLED
ในบทช่วยสอนนี้โดยใช้โปรโตคอล MQTT เราจะได้รับข้อมูลที่บันทึกไว้ทั้งหมด ส่งไปยังบริการ IoT, ThingSpeak.com และไปยังแอปมือถือ (Thingsview) ซึ่งเราสามารถบันทึกและเล่นกับข้อมูลได้
ที่นี่ บล็อกไดอะแกรมของโครงการของเรา:
ขั้นตอนที่ 1: BoM - บิลวัสดุ
- NodeMCU - US$ 8.39
- DHT22 เซ็นเซอร์อุณหภูมิและความชื้นสัมพัทธ์ - USD 9.95
- DS18B20 เซ็นเซอร์อุณหภูมิกันน้ำ - USD 5.95
- จอแสดงผล OLED SSD1366- USD 8.99 (อุปกรณ์เสริม)
- LDR (1x)
- ไฟ LED (1x) (อุปกรณ์เสริม)
- ปุ่มกด (1x)
- ตัวต้านทาน 4K7 โอห์ม (2x)
- ตัวต้านทาน 10K โอห์ม (1x)
- ตัวต้านทาน 220 โอห์ม (1x)
ขั้นตอนที่ 2: Hw
Hw ที่เราจะใช้ที่นี่โดยพื้นฐานแล้วเหมือนกับที่ใช้ในบทช่วยสอน: Micropython บน ESP โดยใช้ Jupyter อ้างถึงมันสำหรับการเชื่อมต่อ HW ทั้งหมด
ข้อยกเว้นคือ Servo ที่เราจะไม่ใช้ในโครงการนี้
ด้านบนคุณสามารถดู HW แบบเต็มได้ เชื่อมต่ออุปกรณ์ตามที่แสดง
ขั้นตอนที่ 3: Micropython, REPL, Jupyter
คุณต้องมีล่าม Micropython โหลดบนอุปกรณ์ ESP ของคุณ เมื่อโหลดแล้ว คุณควรตั้งโปรแกรม ESP โดยใช้วิธีการ/IDE ที่มีอยู่ เช่น:
- ตัวแทน
- Jupyter Notebook
- หมู่
- ESPCut (เฉพาะ Windows)
- … ฯลฯ
ในบทช่วยสอนของฉัน Micropython บน ESP โดยใช้ Jupyter ฉันให้รายละเอียดวิธีดาวน์โหลดและติดตั้งล่าม MicroPython, ESPTool เพื่อจัดการอุปกรณ์ ESP และวิธีใช้ Jupyter Notebook เป็นสภาพแวดล้อมการพัฒนา รู้สึกอิสระที่จะใช้สิ่งที่สะดวกสำหรับคุณ
ฉันมักจะทำการพัฒนาทั้งหมดบน Jupyter Notebook และเมื่อได้โค้ดสุดท้ายแล้ว ฉันจะคัดลอกไปยัง Geany และโหลดลงใน ESP โดยใช้ Ampy
ขั้นตอนที่ 4: เซ็นเซอร์
มาติดตั้งไลบรารี่, กำหนด GPIO, สร้างอ็อบเจ็กต์, ฟังก์ชันสำหรับเซ็นเซอร์ทั้งหมดทีละตัว:
ก. DHT (อุณหภูมิและความชื้น)
มาติดตั้งไลบรารี DHT และสร้างวัตถุ:
จากการนำเข้า dht DHT22
จากการนำเข้าเครื่อง พิน dht22 = DHT22(พิน(12))
ตอนนี้ สร้างฟังก์ชันเพื่ออ่านเซ็นเซอร์ DHT:
def readDht():
dht22.measure() ส่งคืน dht22.temperature(), dht22.humidity() ทดสอบฟังก์ชัน DHT
พิมพ์ (readDht())
ผลลัพธ์ควรเป็นเช่น:
(17.7, 43.4)
ข. DS18B20 (อุณหภูมิภายนอก)
มาติดตั้งไลบรารี่และสร้างวัตถุกันเถอะ:
นำเข้า onewire, ds18x20
เวลานำเข้า # กำหนดขาที่จะเชื่อมต่ออุปกรณ์ 1 สาย ==> พิน 2 (D4) dat = Pin(2) # สร้างวัตถุ onewire ds = ds18x20. DS18X20(onewire. OneWire(dat)) สแกนหาอุปกรณ์บน bu
เซ็นเซอร์ = ds.scan()
พิมพ์ ('อุปกรณ์ที่พบ:' เซ็นเซอร์)
ผลลัพธ์ที่พิมพ์ออกมานั้นไม่สำคัญนัก สิ่งที่เราต้องการคือเซ็นเซอร์ตัวแรกที่ตรวจพบ: เซ็นเซอร์[0] และตอนนี้ เราสามารถสร้างฟังก์ชันเพื่ออ่านข้อมูลเซ็นเซอร์ได้:
def readDs():
ds.convert_temp() time.sleep_ms(750) ส่งคืน ds.read_temp(เซ็นเซอร์[0])
การทดสอบเซ็นเซอร์โดยใช้ฟังก์ชันที่สร้างขึ้นเป็นสิ่งสำคัญเสมอ
พิมพ์(readDs()) หากคุณได้รับค่าอุณหภูมิ รหัสของคุณถูกต้อง
17.5
C. LDR (ความส่องสว่าง)
LDR จะใช้พินอะนาล็อกของ ESP ของเรา (มีเพียงอันเดียวในกรณีของ ESP8266 และอีกหลายอันสำหรับ ESP32)
อ้างถึงบทช่วยสอน ESP32 ของฉันสำหรับรายละเอียด
เช่นเดียวกับที่ทำก่อนหน้านี้:
#นำเข้าห้องสมุด
จากการนำเข้าเครื่อง ADC # กำหนดวัตถุ adc = ADC(0) ฟังก์ชันอย่างง่าย: adc.read() สามารถใช้อ่านค่า ADC ได้ แต่อย่าลืมว่า ADC ภายในจะแปลงแรงดันไฟฟ้าระหว่าง 0 ถึง 3.3V เป็นค่าดิจิตอลที่เกี่ยวข้องกัน ซึ่งมีค่าตั้งแต่ 0 ถึง 1,023 เมื่อเราสนใจ "ความส่องสว่าง" เราจะถือว่าแสงสูงสุดเป็นค่าสูงสุดที่จับได้จากเซ็นเซอร์ (ใน my กรณี 900) และแสงขั้นต่ำที่ในกรณีของฉันคือ 40 มีค่าเหล่านั้นเราสามารถ "แมป" ค่าจาก 40 ถึง 900 ใน 0 ถึง 100% ของความส่องสว่าง เพื่อการนั้น เราจะสร้างฟังก์ชันใหม่
def readLdr():
lumPerct = (adc.read()-40)*(10/86) # แปลงเป็นเปอร์เซ็นต์ ("map") ส่งคืนรอบ (lumPerct)
คุณควรทดสอบฟังก์ชันโดยใช้ print (readLDR()) ผลลัพธ์ควรเป็นจำนวนเต็มระหว่าง o ถึง 100
ง. ปุ่มกด (อินพุตดิจิตอล)
ในที่นี้ เราใช้ปุ่มกดเป็นเซ็นเซอร์ดิจิทัล แต่อาจเป็น "เสียงสะท้อน" ของแอคทูเอเตอร์ (เช่น ปั๊มที่เปิด/ปิด เป็นต้น)
# กำหนดพิน 13 เป็นอินพุตและเปิดใช้งานตัวต้านทานแบบดึงขึ้นภายใน:
ปุ่ม = พิน (13, Pin. IN, Pin. PULL_UP) # ฟังก์ชั่นการอ่านสถานะปุ่ม: def readBut(): return button.value()
คุณสามารถทดสอบปุ่มอ่านฟังก์ชัน print(readBut()) โดยไม่ต้องกดผลลัพธ์ควรเป็น "1" กดปุ่ม ผลลัพธ์ควรเป็น "0"
ขั้นตอนที่ 5: จับและแสดงข้อมูลเซ็นเซอร์ทั้งหมดภายในเครื่อง
ตอนนี้เราได้สร้างฟังก์ชันหนึ่งฟังก์ชันสำหรับเซ็นเซอร์แต่ละตัวแล้ว มาสร้างฟังก์ชันสุดท้ายที่จะอ่านฟังก์ชันทั้งหมดพร้อมกัน:
def colectData():
temp, hum, = readDht() extTemp = readDs() lum = readLdr() butSts = readBut() คืนค่า temp, hum, extTemp, lum, butSts ตอนนี้ถ้าคุณใช้
พิมพ์(colectData())
จะส่งผลให้เกิด tuple ที่รวมข้อมูลที่จับทั้งหมดจากเซ็นเซอร์:
(17.4, 45.2, 17.3125, 103, 1)
นอกจากนี้เรายังสามารถเลือกแสดงข้อมูลเหล่านั้นบนจอแสดงผลในเครื่องได้:
# นำเข้าไลบรารีและสร้างวัตถุ i2c
จากการนำเข้าเครื่อง I2C i2c = I2C(scl=Pin(5), sda=Pin(4)) # นำเข้าไลบรารีและสร้างวัตถุ oled นำเข้า ssd1306 i2c = I2C(scl=Pin(5), sda=Pin(4)) oled = ssd1306. SSD1306_I2C(128, 64, i2c, 0x3c) # สร้างฟังก์ชัน: def displayData(temp, hum, extTemp, lum, butSts): oled.fill(0) oled.text("Temp:" + str(temp) + "oC", 0, 4) oled.text("Hum: " + str(hum) + "%", 0, 16) oled.text("ExtTemp: " + str(extTemp) + "oC", 0, 29) oled.text("Lumin: " + str(lum) + "%", 0, 43) oled.text("Button: " + str(butSts), 0, 57) oled.show() # แสดงข้อมูลโดยใช้ฟังก์ชัน displayData(temp, hum, extTemp, lum, butSts)
เป็นตัวเลือก ฉันจะรวม LED ไว้ด้วยเมื่อเราเริ่มอ่านเซ็นเซอร์ โดยจะปิดหลังจากที่ข้อมูลนั้นแสดงขึ้น การทำเช่นนี้จะช่วยยืนยันว่าโปรแกรมทำงานเมื่อเราตัดการเชื่อมต่อ ESP จากพีซีและทำงานโดยอัตโนมัติ
ดังนั้น หน้าที่หลักจะเป็น:
# ฟังก์ชั่นหลักในการอ่านเซ็นเซอร์ทั้งหมด
def main(): # แสดงข้อมูลด้วยฟังก์ชัน led.on() temp, hum, extTemp, lum, butSts = colectData() displayData(temp, hum, extTemp, lum, butSts) led.off()
ดังนั้นการรัน main() เราจะได้ข้อมูลเซ็นเซอร์ที่แสดงบน OLED ตามที่แสดงในภาพ
ขั้นตอนที่ 6: เรียกใช้ Local Station Code บน ESP Start-up
เราสามารถมีทุกสิ่งที่พัฒนามาจนถึงตอนนี้ในไฟล์เดียวที่ ESP ของเราดำเนินการได้
เปิดโปรแกรมแก้ไขข้อความแล้ววางโค้ดทั้งหมด:
#นำเข้าห้องสมุดทั่วไป
จากการนำเข้าเครื่อง เวลานำเข้าพิน # กำหนดพิน 0 เป็นเอาต์พุตนำ = Pin(0, Pin. OUT) # DHT จากการนำเข้า dht DHT22 dht22 = DHT22 (พิน (12)) # ฟังก์ชั่นการอ่าน DHT def readDht (): dht22.measure () return dht22.temperature(), dht22.humidity() # DS18B20 import onewire, ds18x20 # Define which pin the 1-wire device will be connected ==> pin 2 (D4) dat = Pin(2) # Create the onewire วัตถุ ds = ds18x20. DS18X20(onewire. OneWire(dat)) # สแกนหาอุปกรณ์บนเซ็นเซอร์บัส = ds.scan() # ฟังก์ชั่นอ่าน DS18B20 def readDs(): ds.convert_temp() time.sleep_ms(750) return round(ds.read_temp(sensors[0]), 1) # LDR from machine import ADC # Define object adc = ADC(0) #function to read luminosity def readLdr(): lumPerct = (adc.read()-40) * (10/86) # แปลงเป็นเปอร์เซ็นต์ ("แผนที่") ส่งคืนรอบ (lumPerct) # กำหนดพิน 13 เป็นอินพุตและเปิดใช้งานตัวต้านทานแบบดึงขึ้นภายใน: ปุ่ม = Pin (13, Pin. IN, Pin. PULL_UP) # ฟังก์ชั่นอ่านสถานะปุ่ม: def readBut(): return button.value() # ฟังก์ชั่นอ่านข้อมูลทั้งหมด: def cole ctData(): temp, hum, = readDht() extTemp = readDs() lum = readLdr() butSts = readBut() return temp, hum, extTemp, lum, butSts # นำเข้าไลบรารีและสร้างวัตถุ i2c จากการนำเข้าเครื่อง I2C i2c = I2C(scl=Pin(5), sda=Pin(4)) # นำเข้าไลบรารีและสร้างวัตถุ oled นำเข้า ssd1306 i2c = I2C(scl=Pin(5), sda=Pin(4)) oled = ssd1306. SSD1306_I2C(128, 64, i2c, 0x3c) # สร้างฟังก์ชัน: def displayData(temp, hum, extTemp, lum, butSts): oled.fill(0) oled.text("Temp: " + str(temp) + "oC", 0, 4) oled.text("Hum: " + str(hum) + "%", 0, 16) oled.text("ExtTemp: " + str(extTemp) + "oC", 0, 29) oled text("Lumin: " + str(lum) + "%", 0, 43) oled.text("Button: " + str(butSts), 0, 57) oled.show() # ฟังก์ชั่นหลักในการอ่านเซ็นเซอร์ทั้งหมด def main(): # แสดงข้อมูลด้วยฟังก์ชัน led.on() temp, hum, extTemp, lum, butSts = colectData() displayData(temp, hum, extTemp, lum, butSts) led.off() '''- ----- เรียกใช้ฟังก์ชันหลัก --------''' main()
บันทึก เช่น localData.py
ในการรันโค้ดนี้โดยตรงบนเทอร์มินัลของคุณ คุณจะต้องใช้ Ampy
ก่อนอื่นบน Terminal ให้แจ้ง Ampy พอร์ต Serial ของเรา:
ส่งออก AMPY_PORT=/dev/tty. SLAB_USBtoUART
ตอนนี้ เราสามารถเห็นไฟล์ที่อยู่ในไดเร็กทอรีราก ESP ของเรา:
ampy ls
ในการตอบกลับ เราจะได้ boot.py ซึ่งเป็นไฟล์แรกที่จะทำงานในระบบ
ตอนนี้ ลองใช้ Ampy เพื่อโหลด python Script LocalData.py ของเราเป็น /main.py ดังนั้นสคริปต์จะทำงานหลังจากบูต:
ampy ใส่ localData.py /main/py
หากเราใช้คำสั่ง amp ls ตอนนี้ คุณจะเห็น 2 ไฟล์ใน ESP.: boot.py และ main.py
การรีเซ็ต ESP จะทำให้โปรแกรม localData.py ทำงานโดยอัตโนมัติ โดยแสดงข้อมูลเซ็นเซอร์บนจอแสดงผล
หน้าจอการพิมพ์ Terminal ด้านบนแสดงสิ่งที่เราได้ทำไปแล้ว
ด้วยโค้ดข้างต้น การแสดงผลจะแสดงเพียงครั้งเดียว แต่เราสามารถกำหนดวนซ้ำบนฟังก์ชัน main() ซึ่งจะแสดงข้อมูลในทุกช่วงเวลาที่กำหนด (PUB_TIME_SEC) และตัวอย่างเช่น จนกว่าเราจะกดปุ่ม:
# วนลูปรับข้อมูลจนกว่าจะกดปุ่ม
ในขณะที่ button.value(): led.on() temp, hum, extTemp, lum, butSts = colectData() displayData(temp, hum, extTemp, lum, butSts) led.off() time.sleep(PUB_TIME_SEC)
ต้องประกาศตัวแปร PUB_TIME_SEC ตามเวลาที่คุณต้องการให้ตัวอย่างของคุณ
เพื่อปรับปรุงโค้ดของเราให้มากขึ้น เป็นการดีที่จะแจ้งให้ทราบว่าเราจะออกจากลูป เพื่อที่เราจะกำหนดฟังก์ชันทั่วไปใหม่ 2 ฟังก์ชัน ฟังก์ชันหนึ่งสำหรับล้างการแสดงผล และอีกฟังก์ชันหนึ่งเพื่อกะพริบไฟ LED ในจำนวนครั้งที่กำหนด
# ล้างจอแสดงผล:
def displayClear(): oled.fill(0) oled.show() # create a Blink function def blinkLed(num): สำหรับฉันในช่วง(0, num): led.on() sleep(0.5) led.off() นอนหลับ(0.5)
ตอนนี้เราสามารถเขียนฟังก์ชัน main() ของเราใหม่ได้:
ในขณะที่ button.value():
led.on() temp, hum, extTemp, lum, butSts = colectData() displayData(temp, hum, extTemp, lum, butSts) led.off() time.sleep(PUB_TIME_SEC) blinkLed(3) displayClear()
สามารถดาวน์โหลดรหัสสุดท้ายได้จาก GitHub ของฉัน: localData.py และ Jupyter Notebook ที่ใช้สำหรับการพัฒนาโค้ดแบบเต็ม: Jupyter Local Data Development
ขั้นตอนที่ 7: เชื่อมต่อ ESP กับ Local WiFi
โมดูลเครือข่ายใช้เพื่อกำหนดค่าการเชื่อมต่อ WiFi มีอินเทอร์เฟซ WiFi สองแบบ แบบหนึ่งสำหรับสถานี (เมื่อ ESP8266 เชื่อมต่อกับเราเตอร์) และอีกช่องหนึ่งสำหรับจุดเชื่อมต่อ (สำหรับอุปกรณ์อื่นๆ เพื่อเชื่อมต่อกับ ESP8266) ที่นี่ ESP ของเราจะเชื่อมต่อกับเครือข่ายท้องถิ่น มาเรียกไลบรารี่และกำหนดข้อมูลรับรองเครือข่ายของเรา:
นำเข้าเครือข่าย
WiFi_SSID = "SSID ของคุณ" WiFi_PASS = "รหัสผ่านของคุณ"
สามารถใช้ฟังก์ชันด้านล่างเพื่อเชื่อมต่อ ESP กับเครือข่ายท้องถิ่นของคุณ:
def do_connect():
wlan = network. WLAN(network. STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network…') wlan.connect(WiFi_SSID, WiFi_SSID) while not wlan.isconnected(): ผ่าน พิมพ์ ('การกำหนดค่าเครือข่าย:', wlan.ifconfig ())
เมื่อใช้งานฟังก์ชันนี้ คุณจะได้รับที่อยู่ IP ดังต่อไปนี้:
do_connect()
ผลลัพธ์จะเป็น:
การกำหนดค่าเครือข่าย: ('10.0.1.2', '255.255.255.0', '10.0.1.1', '10.0.1.1')
ในกรณีของฉันคือ 10.0.1.2 คือที่อยู่ IP ของ ESP
ขั้นตอนที่ 8: The ThingSpeak
ณ จุดนี้ เราได้เรียนรู้วิธีบันทึกข้อมูลจากเซ็นเซอร์ทั้งหมด โดยแสดงบน OLED ของเรา ถึงเวลาดูวิธีส่งข้อมูลเหล่านั้นไปยังแพลตฟอร์ม IoT อย่าง ThingSpeak
เอาล่ะ!
ขั้นแรก คุณต้องมีบัญชีที่ ThinkSpeak.com จากนั้น ทำตามคำแนะนำเพื่อสร้างช่องและจดบันทึกรหัสช่องและเขียนคีย์ API
ด้านบนคุณจะเห็นช่อง 5 ช่องที่จะใช้ในช่องของเรา
ขั้นตอนที่ 9: โปรโตคอล MQTT และการเชื่อมต่อ ThingSpeak
MQTT เป็นสถาปัตยกรรมการเผยแพร่/สมัครรับข้อมูลที่พัฒนาขึ้นเพื่อเชื่อมต่อแบนด์วิดท์และอุปกรณ์ที่จำกัดพลังงานผ่านเครือข่ายไร้สายเป็นหลัก เป็นโปรโตคอลที่เรียบง่ายและมีน้ำหนักเบาซึ่งทำงานผ่านซ็อกเก็ต TCP/IP หรือ WebSockets MQTT ผ่าน WebSockets สามารถรักษาความปลอดภัยด้วย SSL สถาปัตยกรรมการเผยแพร่/สมัครรับข้อมูลช่วยให้ส่งข้อความไปยังอุปกรณ์ไคลเอ็นต์โดยที่อุปกรณ์ไม่จำเป็นต้องสำรวจเซิร์ฟเวอร์อย่างต่อเนื่อง
โบรกเกอร์ MQTT เป็นจุดศูนย์กลางของการสื่อสาร และมีหน้าที่รับผิดชอบในการส่งข้อความทั้งหมดระหว่างผู้ส่งและผู้รับที่ถูกต้อง ลูกค้าเป็นอุปกรณ์ใด ๆ ที่เชื่อมต่อกับนายหน้าและสามารถเผยแพร่หรือสมัครรับข้อมูลหัวข้อเพื่อเข้าถึงข้อมูล หัวข้อประกอบด้วยข้อมูลการกำหนดเส้นทางสำหรับนายหน้า ลูกค้าแต่ละรายที่ต้องการส่งข้อความจะเผยแพร่ไปยังหัวข้อใดหัวข้อหนึ่ง และลูกค้าแต่ละรายที่ต้องการรับข้อความจะสมัครรับข้อมูลในหัวข้อใดหัวข้อหนึ่ง นายหน้าจะส่งข้อความทั้งหมดที่มีหัวข้อที่ตรงกันไปยังลูกค้าที่เหมาะสม
ThingSpeak™ มีโบรกเกอร์ MQTT อยู่ที่ URL mqtt.thingspeak.com และพอร์ต 1883 โบรกเกอร์ ThingSpeak รองรับทั้งการเผยแพร่ MQTT และการสมัครรับข้อมูล MQTT
ในกรณีของเรา เราจะใช้: MQTT Publish
รูปอธิบายโครงสร้างหัวข้อ ต้องใช้คีย์ API เขียนเพื่อเผยแพร่ โบรกเกอร์รับทราบคำขอ CONNECT ที่ถูกต้องด้วย CONNACK
โปรโตคอล MQTT ได้รับการสนับสนุนในไลบรารีในตัวในไบนารี Micropython - โปรโตคอลนี้สามารถใช้ส่งข้อมูลจาก ESP8266 ของคุณผ่าน WIFI ไปยังฐานข้อมูลบนคลาวด์ฟรี
ลองใช้ไลบรารี umqtt.simple:
จาก umqtt.simple นำเข้า MQTTClient
และเมื่อทราบ SERVER ID ของเราแล้ว คุณสามารถสร้างวัตถุไคลเอนต์ MQTT ของเราได้:
เซิร์ฟเวอร์ = "mqtt.thingspeak.com"
ลูกค้า = MQTTClient("umqtt_client", SERVER)
ตอนนี้ มีข้อมูลประจำตัว ThingSpeak อยู่ในมือแล้ว:
CHANNEL_ID = "รหัสช่องของคุณ"
WRITE_API_KEY = "กุญแจของคุณที่นี่"
มาสร้าง MQTT "หัวข้อ" ของเรากันเถอะ:
หัวข้อ = "ช่อง/" + CHANNEL_ID + "/เผยแพร่/" + WRITE_API_KEY
มาส่งข้อมูลของเราไปที่ ThingSpeak IoT Service โดยใช้ฟังก์ชันที่สร้างขึ้นและเชื่อมโยงการตอบสนองต่อตัวแปรข้อมูลเฉพาะ:
อุณหภูมิ, ฮัม, extTemp, lum, butSts = colectData()
เมื่ออัปเดตตัวแปรเหล่านั้น เราสามารถสร้าง "MQTT Payload" ของเราได้:
เพย์โหลด = "field1="+str(temp)+"&field2="+str(hum)+"&field3="+str(extTemp)+"&field4="+str(lum)+"&field5="+str(butSts))
และนั่นแหล่ะ! เราพร้อมที่จะส่งข้อมูลไปยัง ThinsSpeak เพียงแค่ใช้โค้ด 3 บรรทัดด้านล่าง:
client.connect()
client.publish(หัวข้อ, เพย์โหลด) client.disconnect()
ตอนนี้ หากคุณไปที่หน้าช่องของคุณ (ตามที่ของฉันด้านบน) คุณจะเห็นว่าแต่ละฟิลด์จาก 5 ช่องจะมีข้อมูลที่เกี่ยวข้องกับเซ็นเซอร์ของคุณ
ขั้นตอนที่ 10: ตัวบันทึกข้อมูลเซ็นเซอร์
ตอนนี้ เมื่อเรารู้ว่ามีโค้ดเพียงไม่กี่บรรทัดที่อัปโหลดข้อมูลไปยังบริการ IoT ได้แล้ว เรามาสร้างฟังก์ชันวนรอบเพื่อดำเนินการโดยอัตโนมัติตามช่วงเวลาปกติ (คล้ายกับที่เราเคยทำกับ "ข้อมูลในเครื่อง") ")
การใช้ตัวแปรเดียวกัน (PUB_TIME_SEC) ที่ประกาศไว้ก่อนหน้านี้ ฟังก์ชันหลักง่ายๆ ในการบันทึกข้อมูลอย่างต่อเนื่อง การบันทึกลงในช่องของเราจะเป็นดังนี้:
ในขณะที่จริง:
temp, hum, extTemp, lum, butSts = colectData() payload = "field1="+str(temp)+"&field2="+str(hum)+"&field3="+str(extTemp)+"&field4="+ str(lum)+"&field5="+str(butSts) client.connect() client.publish(topic, payload) client.disconnect() time.sleep(PUB_TIME_SEC)
โปรดทราบว่าจะต้องอัปเดตเฉพาะ "ส่วนข้อมูล" เมื่อ "หัวข้อ" เกี่ยวข้องกับข้อมูลรับรองช่องของเราและจะไม่เปลี่ยนแปลง
เมื่อมองหาหน้าช่อง ThingSpeak คุณจะสังเกตเห็นว่าข้อมูลจะถูกโหลดอย่างต่อเนื่องในแต่ละฟิลด์ คุณสามารถปิด LDR วางมือบนเซ็นเซอร์อุณหภูมิ/ความชื้น กดปุ่ม ฯลฯ และดูว่าช่องจะ "บันทึก" ข้อมูลเหล่านั้นโดยอัตโนมัติเพื่อการวิเคราะห์ในอนาคตได้อย่างไร
โดยปกติ สำหรับการบันทึกข้อมูล เราควรพยายามใช้พลังงานให้น้อยที่สุดเท่าที่จะเป็นไปได้ ดังนั้นเราจะไม่ใช้ LED หรือจอแสดงผลในเครื่อง นอกจากนี้ยังเป็นเรื่องปกติสำหรับอุปกรณ์ ESP โดยวางไว้ใน "โหมดหลับลึก" โดยที่ไมโครโปรเซสเซอร์จะอยู่ในสถานะพลังงานต่ำสุดจนกว่าจะถึงเวลาที่จะเก็บข้อมูลและส่งไปยังแพลตฟอร์ม IoT
แต่เมื่อเกิดแนวคิดขึ้นแล้ว ให้รวมจอแสดงผลและ LED ไว้ด้วยเหมือนที่เคยทำมา ในการทำเช่นนั้น ฟังก์ชัน "คนตัดไม้" ของเราจะเป็น:
ในขณะที่ button.value():
led.on() temp, hum, extTemp, lum, butSts = colectData() displayData(temp, hum, extTemp, lum, butSts) led.off() temp, hum, extTemp, lum, butSts = colectData() payload = ไคลเอนต์ "field1="+str(temp)+"&field2="+str(hum)+"&field3="+str(extTemp)+"&field4="+str(lum)+"&field5="+str(butSts).connect() client.publish(หัวข้อ, payload) client.disconnect() time.sleep(PUB_TIME_SEC) blinkLed(3) displayClear()
สามารถดูสคริปต์ microPython ฉบับสมบูรณ์ได้ที่นี่: dataLoggerTS_EXT.py และสมุดบันทึก Jupyter ที่ใช้สำหรับการพัฒนาสามารถพบได้ที่นี่: IoT ThingSpeak Data Logger EXT.ipynb
ในการอัปโหลดสคริปต์บน ESP บนเทอร์มินัลของคุณให้ใช้คำสั่ง:
ampy ใส่ dataLoggerTS.py /main.py
และกดปุ่ม ESP - รีเซ็ต คุณจะมี ESP ที่จับข้อมูลและบันทึกลงใน ThingSpeak.com จนกว่าจะกดด้านล่างค้างไว้ (รอให้ไฟ LED กะพริบ 3 ครั้งและ OLED จะดับลง)
ขั้นตอนที่ 11: แอพ ThingView
ข้อมูลที่บันทึกไว้สามารถดูได้โดยตรงบนเว็บไซต์ ThingSpeak.com หรือผ่านแอพ เช่น ThingsView!
ThingView เป็นแอปที่พัฒนาโดย CINETICA ที่ให้คุณเห็นภาพช่อง ThingSpeak ของคุณในวิธีที่ง่าย เพียงป้อนรหัสช่อง คุณก็พร้อมแล้ว
สำหรับช่องสาธารณะ แอปพลิเคชันจะเคารพการตั้งค่าหน้าต่างของคุณ: สี ช่วงเวลา ประเภทแผนภูมิ และจำนวนผลลัพธ์ เวอร์ชันปัจจุบันรองรับแผนภูมิเส้นและคอลัมน์ แผนภูมิ spline จะแสดงเป็นแผนภูมิเส้น
สำหรับช่องส่วนตัว ข้อมูลจะแสดงโดยใช้การตั้งค่าเริ่มต้น เนื่องจากไม่มีวิธีอ่านการตั้งค่าหน้าต่างส่วนตัวด้วยคีย์ API เท่านั้น
สามารถดาวน์โหลดแอป ThingView สำหรับ Android และ IPHONE
ขั้นตอนที่ 12: บทสรุป
และเช่นเคย ฉันหวังว่าโครงการนี้จะช่วยให้ผู้อื่นค้นพบหนทางสู่โลกที่น่าตื่นเต้นของอิเล็กทรอนิกส์!
สำหรับรายละเอียดและรหัสสุดท้าย โปรดไปที่ศูนย์ฝาก GitHub ของฉัน: IoT_TS_MQTT
สำหรับโครงการเพิ่มเติม โปรดเยี่ยมชมบล็อกของฉัน: MJRoBot.org
Saludos จากทางใต้ของโลก!
พบกันใหม่ในคำสั่งต่อไปของฉัน!
ขอขอบคุณ, มาร์เซโล
แนะนำ:
M5STACK วิธีแสดงอุณหภูมิ ความชื้น และแรงกดบน M5StickC ESP32 โดยใช้ Visuino - ทำได้ง่าย: 6 ขั้นตอน
M5STACK วิธีแสดงอุณหภูมิ ความชื้น และความดันบน M5StickC ESP32 โดยใช้ Visuino - ง่ายต่อการทำ: ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีตั้งโปรแกรม ESP32 M5Stack StickC ด้วย Arduino IDE และ Visuino เพื่อแสดงอุณหภูมิ ความชื้น และความดันโดยใช้เซ็นเซอร์ ENV (DHT12, BMP280, BMM150)
วิธีสร้าง ESP Talk หลายรายการผ่าน ESP-NOW โดยใช้ ESP32 และ ESP8266: 8 ขั้นตอน
วิธีสร้าง ESP Talk หลายรายการผ่าน ESP-NOW โดยใช้ ESP32 และ ESP8266: ในโครงการที่กำลังดำเนินการอยู่ ฉันต้องการ ESP หลายรายการเพื่อพูดคุยกันโดยไม่ต้องใช้เราเตอร์ ในการทำเช่นนี้ ฉันจะใช้ ESP-NOW เพื่อสื่อสารแบบไร้สายระหว่างกันโดยไม่ต้องใช้เราเตอร์บน ESP
ESP 32 กล้องสตรีมมิ่งวิดีโอผ่าน WiFi - เริ่มต้นใช้งานกับบอร์ด ESP 32 CAM: 8 ขั้นตอน
ESP 32 กล้องสตรีมมิ่งวิดีโอผ่าน WiFi | การเริ่มต้นใช้งานกับบอร์ด ESP 32 CAM: ESP32-CAM เป็นโมดูลกล้องขนาดเล็กมากที่มีชิป ESP32-S ซึ่งมีราคาประมาณ 10 ดอลลาร์ นอกจากกล้อง OV2640 และ GPIO หลายตัวสำหรับเชื่อมต่ออุปกรณ์ต่อพ่วงแล้ว ยังมีช่องเสียบการ์ด microSD ที่สามารถเป็นประโยชน์ในการจัดเก็บภาพที่ถ่ายด้วยเ
เริ่มต้นใช้งาน Esp 8266 Esp-01 ด้วย Arduino IDE - การติดตั้งบอร์ด Esp ใน Arduino Ide และการเขียนโปรแกรม Esp: 4 ขั้นตอน
เริ่มต้นใช้งาน Esp 8266 Esp-01 ด้วย Arduino IDE | การติดตั้งบอร์ด Esp ใน Arduino Ide และการเขียนโปรแกรม Esp: ในคำแนะนำนี้ เราจะได้เรียนรู้วิธีติดตั้งบอร์ด esp8266 ใน Arduino IDE และวิธีตั้งโปรแกรม esp-01 และอัปโหลดโค้ดในนั้น เนื่องจากบอร์ด esp ได้รับความนิยมอย่างมาก และคนส่วนใหญ่ประสบปัญหา
การสื่อสาร ESP เป็น ESP: 4 ขั้นตอน
การสื่อสาร ESP เป็น ESP: บทช่วยสอนนี้จะช่วยให้คุณเปลี่ยนโมดูลตัวรับส่งสัญญาณอื่น ๆ สำหรับโครงการอื่น ๆ ที่มีการสื่อสารไร้สาย เราจะใช้บอร์ดที่ใช้ ESP8266 อันหนึ่งในโหมด WiFi-STA และอีกอันในโหมด WiFi -AP NodeMCU V3 คือตัวเลือกของฉันสำหรับโปรเจ็กต์นี้