สารบัญ:

Inky_pHAT สถานีตรวจอากาศ: 5 ขั้นตอน
Inky_pHAT สถานีตรวจอากาศ: 5 ขั้นตอน

วีดีโอ: Inky_pHAT สถานีตรวจอากาศ: 5 ขั้นตอน

วีดีโอ: Inky_pHAT สถานีตรวจอากาศ: 5 ขั้นตอน
วีดีโอ: BAOFENG UV5III แนะนำการใช้งาน ทั่วไป 2024, พฤศจิกายน
Anonim
Inky_pHAT สถานีอากาศ
Inky_pHAT สถานีอากาศ
Inky_pHAT สถานีอากาศ
Inky_pHAT สถานีอากาศ
Inky_pHAT สถานีอากาศ
Inky_pHAT สถานีอากาศ
Inky_pHAT สถานีอากาศ
Inky_pHAT สถานีอากาศ

ฉันต้องการอธิบายสถานีตรวจอากาศที่ใช้ Raspberry Pi Zero ที่เรียบง่ายและกะทัดรัด ซึ่งแสดงค่าที่วัดโดยเซ็นเซอร์อุณหภูมิ/ความดัน/ความชื้น BME280 บนจอแสดงผล e-paper/e-ink ของ Pimoroni Inky pHAT เพื่อให้การเชื่อมต่อของเซ็นเซอร์และ pHAT กับ GPIO ของ Pi I ได้วางแฮ็กเกอร์ Pimorini Pico HAT โดยมีส่วนหัวของเพศหญิงสองตัวติดอยู่ระหว่าง GPIO และจอแสดงผล อุปกรณ์นี้เคยใช้แนบเซ็นเซอร์หลายตัว ดังนั้นรุ่น BME280 ที่อธิบายในที่นี้เป็นเพียงตัวอย่างเท่านั้น

ต่างจากจอ LCD ตรงที่จอ e-ink จะเก็บภาพไว้แม้ว่าจะปิดเครื่องแล้วก็ตาม ดังนั้นจึงเป็นทางออกที่ดีมากหากคุณต้องการแสดงข้อมูลที่อัปเดตเป็นครั้งคราว โดยเฉพาะในการสร้างอุปกรณ์ที่ใช้พลังงานต่ำ ประโยชน์ที่สำคัญของ Inky pHAT รุ่นขาวดำ/ดำคือการอัปเดตจอแสดงผลใช้เวลาประมาณหนึ่งวินาที แทนที่จะเป็นสิบถึงสิบห้าวินาทีที่เวอร์ชันสามสีต้องการ ดูหนัง.

ไลบรารี Blinka ของ Adafruit อนุญาตให้เรียกใช้โค้ด Circuit Python บน Raspberry Pi และตัวอย่าง Circuit Python สำหรับเซ็นเซอร์ที่หลากหลายมีอยู่ใน Adafruit ดูรายละเอียดวิธีการติดตั้ง Blinka และรหัส Circuit Python ได้ที่เว็บไซต์ Adafruit ไลบรารี่ที่ฉันทดสอบจนถึงตอนนี้ (BMP280, BME280, TSL2591, TCS34785, VEML7065, …) ทำงานได้ดีมาก ในขณะที่โค้ดตัวอย่างบางส่วนมีปัญหาเล็กน้อย

BME280 เป็นเซ็นเซอร์วัดอุณหภูมิ ความชื้น และความกดอากาศ BMP280 breakouts มีให้บริการจากผู้ค้าหลายรายรวมถึง Adafruit แต่ฉันใช้เวอร์ชันภาษาจีนราคาถูก โปรดทราบว่าที่อยู่เหล่านี้ใช้ที่อยู่ i2c ที่แตกต่างกัน (Adafruit: 0x77, อื่นๆ: 0x76)

การฝ่าวงล้อมเชื่อมต่อกับ Pi โดย i2c และการอ่านเซ็นเซอร์ทำได้ง่ายมากโดยใช้ไลบรารีและโค้ดตัวอย่าง

ขั้นตอนที่ 1: วัสดุที่ใช้

วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้

Raspberry Pi Zero พร้อมส่วนหัวของตัวผู้ติดอยู่ แต่รุ่น Raspberry Pi ใด ๆ ก็ทำได้

Pimoroni Inky pHAT รุ่นสีดำ/ขาวดำ 25€|22£|20US$ ที่ Pimoroni

แฮ็กเกอร์ Pimoroni Pico HAT 2.50€|2£ พร้อมส่วนหัวของตัวเมียสองตัวติดอยู่ หนึ่งในนั้นเป็นส่วนหัวของบูสเตอร์ที่มีหมุดยาวกว่า ฉันได้สร้างสองเวอร์ชันที่แตกต่างกัน โปรดดูคำอธิบายด้านล่าง

การฝ่าวงล้อม BME280, AZ Delivery ผ่าน Amazon.de @ 7.50 € พร้อมแนบส่วนหัว

สายจัมเปอร์ยืดตัว

ไม่จำเป็น:

ชุดไฟ USB สำหรับแอปพลิเคชันมือถือ

ที่อยู่อาศัยสำหรับ Pi หรืออุปกรณ์ (ไม่แสดงที่นี่)

ขั้นตอนที่ 2: การประกอบ

การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
  • ประสานส่วนหัวของผู้หญิงกับแฮ็กเกอร์ Pico HAT ก่อนบัดกรีให้ตรวจสอบทิศทางที่ถูกต้อง ฉันได้สร้างเวอร์ชันนี้ไว้ 2 เวอร์ชัน เพื่อวัตถุประสงค์ที่ต่างกัน ตัวหนึ่งมีส่วนหัวของบูสเตอร์แบบคว่ำลงที่แถวหน้าและแบบปกติที่ส่วนหัวของบูสเตอร์แบบหันขึ้น/คว่ำในแถวหลัง และรุ่นที่มีส่วนหัวของบูสเตอร์แบบคว่ำลงที่แถวหลัง และส่วนหัวแบบตัวเมียแบบมุมขวาที่แถวหน้า. ดูภาพ เวอร์ชันแรกช่วยให้ติดและแลกเปลี่ยนเซ็นเซอร์และสายเคเบิลได้ง่ายมาก ในขณะที่เวอร์ชันที่มีส่วนหัวที่หันเข้าด้านในจะอนุญาตให้ใส่ Pi, เซ็นเซอร์และ Inky pHAT ไว้ในตัวเรือน หรือคุณอาจบัดกรีสายเคเบิลที่เชื่อมต่อ GPIO และเซ็นเซอร์เข้ากับแฮ็กเกอร์ Pico HAT โดยตรง และ/หรือบัดกรีแฮ็กเกอร์ Pico HAT โดยตรงกับพิน GPIO ไม่ว่าในกรณีใด ให้ใช้ปริมาณบัดกรีที่จำเป็นน้อยที่สุด
  • ประสานส่วนหัวกับเซ็นเซอร์ ถ้าจำเป็น
  • ซ้อนหน่วยแฮ็กเกอร์ Pico HAT ที่แก้ไขแล้วบน Pi จากนั้นเพิ่ม Inky pHAT หากจำเป็น ให้ใส่ส่วนรองรับ เช่น บล็อคโฟมหรือขาตั้งสำหรับ Inky pHAT
  • ต่อสายเคเบิลและเซ็นเซอร์โดยใช้พอร์ต 3V, GND, SDA และ SCL เซ็นเซอร์บางตัวอาจไม่รอด 5V ดังนั้นโปรดตรวจสอบก่อนที่คุณจะเชื่อมต่อกับพอร์ต 5V
  • ติดตั้งไลบรารี Blinka จากนั้นติดตั้งไลบรารี Circuit Python BME280 จาก Adafruit
  • ติดตั้งไลบรารี Inky pHAT จาก Pimoroni
  • ติดตั้งตัวอย่างโค้ด Python ที่อธิบายไว้ในขั้นตอนต่อมาและแนบมากับคำแนะนำนี้
  • เรียกใช้รหัส

ขั้นตอนที่ 3: การใช้อุปกรณ์

การใช้เครื่อง
การใช้เครื่อง

มีสองตัวเลือกในการใช้อุปกรณ์

รหัสตามที่แสดงนี้จะเริ่มขึ้นโดยใช้หน้าจอที่แนบมา แต่จากนั้นก็สามารถรันได้โดยไม่ต้องใช้

ด้วยการปรับเปลี่ยนโค้ดเล็กน้อย คุณอาจใช้ crontab เพื่อทำการวัด ณ จุดเวลาที่กำหนด ซึ่งจะช่วยลดการใช้พลังงานให้ดียิ่งขึ้นไปอีก คำอธิบายที่ยอดเยี่ยมเกี่ยวกับวิธีใช้ crontab สามารถพบได้ที่อื่น

เมื่อใช้ร่วมกับชุดจ่ายไฟ คุณสามารถสร้างอุปกรณ์เคลื่อนที่และใช้เพื่อวัดสภาพภายในหรือภายนอก ในตู้เย็น ในห้องซาวน่า เครื่องทำความชื้น ห้องเก็บไวน์ ในเครื่องบิน ….

การใช้ Zero W คุณอาจไม่เพียงแต่แสดงค่าบนจอแสดงผล แต่ยังส่งไปยังเซิร์ฟเวอร์หรือเว็บไซต์ของคุณผ่าน WLAN ตามที่อธิบายไว้ในที่อื่น

ขั้นตอนที่ 4: สคริปต์ BME280

สคริปต์ BME280
สคริปต์ BME280

ดังที่ได้กล่าวไว้ก่อนหน้านี้ คุณต้องติดตั้งไลบรารี Adafruit Blinka และ Circuit Python BME280 รวมถึงไลบรารี Pimoroni Inky pHAT

โค้ดจะเริ่มต้นเซ็นเซอร์และ Inky pHAT ก่อน จากนั้นจะอ่านค่าอุณหภูมิ ความดัน และความชื้นจากเซ็นเซอร์และแสดงบนหน้าจอและการแสดงผลหมึกอิเล็กทรอนิกส์ ใช้คำสั่ง time.sleep() การวัดทุกนาที ปรับตามต้องการ โดยการตั้งค่าพารามิเตอร์ภาษา คุณสามารถเปลี่ยนภาษาที่ใช้แสดงผลได้

ด้วยการใช้จอแสดงผล Inky pHAT e-ink คุณจะต้องสร้างรูปภาพเพื่อแสดงในหน่วยความจำก่อน จากนั้นจึงถ่ายโอนไปยังหน้าจอโดยใช้คำสั่ง inkyphat.show() ไลบรารี Inky pHAT ทำให้กระบวนการง่ายขึ้น โดยมีคำสั่งให้วาดและจัดรูปแบบข้อความ เส้น สี่เหลี่ยมผืนผ้า วงกลม หรือใช้ภาพพื้นหลัง

นอกจากค่าที่วัดได้ เวลาในการวัดก็จะแสดงด้วยเช่นกัน

โปรดทราบว่าสคริปต์และไลบรารีนั้นเขียนด้วย Python 3 ดังนั้นให้เปิดและเรียกใช้โดยใช้ Py3 IDLE หรือเทียบเท่า

# สคริปต์สำหรับเซ็นเซอร์อุณหภูมิ/ความดัน/ความชื้น bme280 (เวอร์ชันที่ไม่ใช่ Adafruit)# และ pHAT ที่เป็นหมึก - รุ่นสีดำ # # รุ่นวันที่ 1 ธันวาคม 2018 Dr H # # ต้องใช้ไลบรารี Adafruit Blinka และ Circuit Python BME280 # และ Pimoroni Inky pHAT ห้องสมุดนำเข้าเวลานำเข้าวันที่และเวลานำเข้ากระดานนำเข้า busio จาก adafruit_bme280 นำเข้า Adafruit_BME280 จาก adafruit_bme280 นำเข้า Adafruit_BME280_I2C นำเข้า inkyphat นำเข้า sys จาก PIL นำเข้า ImageFont inkyphat.set_colour ('black') # สำหรับ b / w inky phat inkyphat.set_ turnrotation 180° font1 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 27) # เลือกฟอนต์มาตรฐานฟอนต์2 = ImageFont.truetype(inkyphat.fonts. FredokaOne, 19) # เลือกข้อมูลฟอนต์มาตรฐาน # lang ="DE" # ตั้งค่าพารามิเตอร์ภาษา ค่าเริ่มต้น ("") -> ภาษาอังกฤษ lang = "EN" i2c = busio. I2C (board. SCL, board. SDA) bmp = Adafruit_BME280_I2C (i2c, address = 0x76) # ค่าเริ่มต้นที่อยู่ i2c (สำหรับ Adafruit BMP280) 0x77 (ค่าเริ่มต้น), 0x76 สำหรับการฝ่าวงล้อมจีน) #set แรงดันอ้างอิง # ที่จำเป็นสำหรับal การคำนวณไตเติ้ล โปรดปรับ ค่ามาตรฐาน 1013.25 hPa # อินพุตแบบแมนนวล: #reference_hPa =input ("ป้อนแรงดันอ้างอิงใน hPa: ") # หรือ # ตั้งค่าความดัน ณ เวลาเริ่มต้นเป็นข้อมูลอ้างอิง เช่น สำหรับการวัดความสูงสัมพัทธ์ time.sleep (1) # รอสักครู่ก่อนการวัดครั้งที่ 1 j= 0 pres_norm_sum = 0 ขณะที่ j อยู่ในช่วง (5): # ใช้การวัดห้าครั้งเพื่อกำหนดค่าอ้างอิง pres_norm_sum = pres_norm_sum + bmp.pressure j= j+ 1 time.sleep (1) reference_hPa=(pres_norm_sum/j) # ตั้งค่าการวัดเริ่มต้นเป็นจุดอ้างอิงเพื่อเปิดใช้งานการวัดความสูง bmp.sea_level_pressure = float (reference_hPa) พิมพ์ () ในขณะที่ True: #runs forever, แก้ไขสำหรับ crontab-version # วัด ค่า t=bmp.temperature p=bmp.pressure h=bmp.humidity a=bmp.altitude # คำนวณโดยไลบรารี adafruit จากความดัน #timestamp ts = datetime.datetime.now() # timestamp ts0_EN ='{:%Y-% m-%d}'.format(ts) # timestamp - date, รูปแบบ EN ts0_DE ='{:%d.%m.%Y}'.format(ts) # timestamp - วันที่ รูปแบบภาษาเยอรมัน ts1='{: %H:%M:%S}'.format(ts) # timestamp - เวลา tmp = "{0:0.1f}".format(t) pre = "{0:0.1f}".format(p) hyg = "{0:0.1f}".format(h) alt="{0:0.1f}".format(a) tText = "Temp.: " pText_EN = "ความดัน: " pText_DE = "Luftdruck: " h Text_EN = "ความชื้น:" hText_DE = "rel. LF: " aText_EN = "ระดับความสูง:" aText_DE = "Höhe üNN:" # exakt: ü. NHN, über Normal Höhen Null if (lang =="DE"): ts0 = ts0_DE aText = aText_DE pText = pText_DE hText else = hText_DE: # ค่าเริ่มต้นภาษาอังกฤษ ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # พิมพ์ค่าเพื่อแสดงการพิมพ์ (ts) พิมพ์ (tText, tmp, "°C") พิมพ์ (pText, ก่อน " hPa") พิมพ์ (hText, hyg, " %") พิมพ์ (aText, alt, " m") พิมพ์ () # พิมพ์ค่าเป็น Inky pHAT t1 = 5 # แท็บ 1 คอลัมน์ frist ลดความซับซ้อนของการปรับรูปแบบ t2 = 110 # แท็บ 2 คอลัมน์ที่สอง inkyphat clear() inkyphat.text((t1, 0), ts0, inkyphat. BLACK, font2) # write timestamp date inkyphat.text((t2, 0), ts1, inkyphat. BLACK, font2) # เขียนเวลาประทับเวลา inkyphat.line ((t1, 25, 207, 25), 1, 3) # วาดเส้น inkyphat.text((t1, 30), tText, inkyphat. BLACK, font2) inkyphat.text((t2, 30), (tmp + "°C"), inkyphat. BLACK, font2) inkyphat.text((t1, 55), pText, inkyphat. BLACK, font2) inkyphat.text((t2, 55), (ก่อน + " hPa"), inkyphat BLACK, font2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text((t2, 80), (hyg + " %"), inkyphat. BLACK, font2) # หรือแสดงความสูงที่คำนวณได้ # inkyphat.text((t1, 80), aText, inkyphat. BLACK, font2) # inkyphat.text((t2, 80), (alt + " m"), inkyphat. BLACK, font2) inkyphat.show() time.sleep(51) # รอสักครู่ก่อนการวัดครั้งต่อไป +19 วินาทีต่อรอบ inkyphat.clear () # ขั้นตอนการแสดงผล Inky pHAT ที่ว่างเปล่า inkyphat.show () # เงียบสำหรับรุ่น crontab

ขั้นตอนที่ 5: สคริปต์ BMP280

BMP280 นั้นคล้ายกับเซ็นเซอร์ BME280 มาก แต่เพียงวัดอุณหภูมิและความดันเท่านั้น สคริปต์มีความคล้ายคลึงกันมาก แต่คุณต้องมีไลบรารี Circuit Python ที่แตกต่างกัน ที่นี่จะแสดงความสูงที่คำนวณโดยอิงจากแรงดันอ้างอิงแทนความชื้น

แนบคุณพบสคริปต์

แนะนำ: