สร้างสถานีตรวจอากาศ Raspberry Pi ของคุณเอง

Build Your Own Raspberry Pi Weather Station



Raspberry Pi Sense Hat เป็นบอร์ดเสริมที่สามารถใช้กับคอมพิวเตอร์บอร์ดเดี่ยว Raspberry Pi Raspberry Pi Sense Hat มีหน้าจอ LED 8×8 และจอยสติ๊กแบบ 5 ปุ่ม และมาพร้อมกับเซ็นเซอร์ดังต่อไปนี้:

  1. ไจโรสโคป
  2. มาตรความเร่ง
  3. เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก
  4. อุณหภูมิ
  5. ความกดอากาศ
  6. ความชื้น

ในบทความนี้ ฉันจะแสดงวิธีสร้างเว็บแอปพลิเคชันสถานีตรวจอากาศที่ใช้ Python API โดยใช้ อุณหภูมิ , ความกดอากาศ , และ ความชื้น เซ็นเซอร์ของ Raspberry Pi Sense Hat เพื่อติดตามบทความนี้ คุณจะต้องมีสิ่งต่อไปนี้:







  1. Raspberry Pi 3 หรือ Raspberry Pi 4 พร้อมการเชื่อมต่อเครือข่าย
  2. โมดูล Raspberry Pi Sense Hat
  3. อะแดปเตอร์แปลงไฟ micro-USB (Raspberry Pi 3) หรือ USB Type-C (Raspberry Pi 4)
  4. การ์ด microSD ขนาด 16 GB หรือ 32 GB พร้อม Raspberry Pi OS
  5. แล็ปท็อปหรือคอมพิวเตอร์เดสก์ท็อปสำหรับการเข้าถึงเดสก์ท็อประยะไกล VNC หรือการเข้าถึง SSH ของ Raspberry Pi

บันทึก: ในบทความนี้ เราจะเชื่อมต่อกับ Raspberry Pi จากระยะไกลผ่าน VNC หรือ SSH โดยใช้การตั้งค่าหัวขาดของ Raspberry Pi หากคุณไม่ต้องการเข้าถึง Raspberry Pi จากระยะไกลผ่าน SSH หรือ VNC คุณจะต้องเชื่อมต่อจอภาพ คีย์บอร์ด และเมาส์กับ Raspberry Pi



หากต้องการเรียนรู้วิธีแฟลชอิมเมจ Raspberry Pi OS ลงในการ์ด microSD โปรดอ้างอิงวิธีการติดตั้งและใช้งาน Raspberry Pi Imager หากคุณต้องการความช่วยเหลือในการติดตั้ง Raspberry Pi OS บน Raspberry Pi โปรดอ่าน วิธีการติดตั้ง Raspberry Pi OS บน Raspberry Pi 4 . หากคุณต้องการความช่วยเหลือเกี่ยวกับการตั้งค่า Raspberry Pi แบบไม่มีส่วนหัว โปรดดูวิธีติดตั้งและกำหนดค่า Raspberry Pi OS บน Raspberry Pi 4 โดยไม่ต้องใช้จอภาพภายนอก



การเชื่อมต่อ Raspberry Pi Sense Hat กับ Raspberry Pi

ชุด Raspberry Pi Sense Hat มาพร้อมกับบอร์ดเสริม Raspberry Pi Sense Hat, ส่วนหัว 40 พินตัวผู้ต่อตัวเมีย และสกรูและสเปเซอร์บางตัว





ก่อนที่คุณจะสามารถแนบบอร์ด Sense Hat กับ Raspberry Pi คุณต้องเชื่อมต่อส่วนหัว 40 พินกับ Sense Hat ต่อหมุดตัวผู้ของส่วนหัวตัวผู้-ตัวเมีย 40 พินเข้ากับ Sense Hat ดังแสดงในภาพด้านล่าง



คอมพิวเตอร์บอร์ดเดี่ยว Raspberry Pi มี 4 รูที่สามารถใช้แนบบอร์ดเสริมหรือเคสได้ ในการติดบอร์ดเสริม ให้ใส่สกรูจากด้านหลังของ Raspberry Pi ดังแสดงในภาพด้านล่าง

จากนั้นต่อตัวเว้นวรรคกับสกรู

เมื่อคุณเพิ่มสกรูและสเปเซอร์ทั้งสี่ตัวแล้ว Raspberry Pi ของคุณควรมีลักษณะดังที่แสดงในภาพด้านล่าง

เชื่อมต่อ Raspberry Pi Sense Hat กับส่วนหัว GPIO ตัวผู้ 40 พินของ Raspberry Pi ดังที่แสดงในภาพด้านล่าง

บันทึก: โปรดใช้ความระมัดระวังขณะถอด Raspberry Pi Sense Hat ออกจากส่วนหัว GPIO 40 พินของ Raspberry Pi เพื่อหลีกเลี่ยงไม่ให้พินของ Raspberry Pi GPIO งอ

ด้วยสกรูที่เหลืออีกสี่ตัว ให้ยึด Raspberry Pi Sense Hat ตามที่แสดงในภาพด้านล่าง

เปิดเครื่อง Raspberry Pi

ตอนนี้ Raspberry Pi Sense Hat เชื่อมต่อกับ Raspberry Pi แล้ว ใส่การ์ด microSD ที่มี Raspberry Pi OS ลงในช่องเสียบการ์ด microSD ของ Raspberry Pi ต่อสายไฟเข้ากับ Raspberry Pi แล้วเปิดเครื่อง

การติดตั้งไลบรารี Python ของหมวก Raspberry Pi Sense

ในการใช้ Raspberry Pi Sense Hat บน Raspberry Pi, the ความรู้สึกหมวก ต้องติดตั้งไลบรารี Python บน Raspberry Pi OS NS ความรู้สึกหมวก ไลบรารี่มีอยู่ในที่เก็บแพ็คเกจอย่างเป็นทางการของ Raspberry Pi OS

การติดตั้ง Raspberry Pi ความรู้สึกหมวก ไลบรารี Python บน Raspberry Pi OS ก่อนอื่นให้อัปเดตแคชที่เก็บแพ็คเกจ APT ด้วยคำสั่งต่อไปนี้:

$ sudo apt update

จากนั้นรันคำสั่งต่อไปนี้:

$ sudo apt ติดตั้ง sense-hat -y

การติดตั้งไลบรารี Python ของ Flask Micro Web Framework

เราจะใช้เฟรมเวิร์ก Flask Python เพื่อสร้างแอปพลิเคชันสภาพอากาศของเรา คุณสามารถติดตั้ง Flask จากที่เก็บแพ็คเกจอย่างเป็นทางการของ Raspberry Pi OS ด้วยคำสั่งต่อไปนี้:

$ sudo apt ติดตั้ง python3-flask -y

การสร้างไดเรกทอรีโครงการ

เป็นความคิดที่ดีที่จะสร้างไดเร็กทอรีโครงการเพื่อจัดระเบียบไฟล์โครงการของคุณ เพื่อสร้างไดเร็กทอรีโครงการ ~/งาน , ใช้คำสั่งต่อไปนี้:

$ mkdir ~/work

เมื่อสร้างไดเร็กทอรีโครงการแล้ว ให้ไปที่ไดเร็กทอรีโครงการดังนี้:

$ cd ~/work

การทดสอบ Raspberry Pi Sense Hat

เพื่อทดสอบว่า Raspberry Pi Sense Hat ใช้งานได้หรือไม่ เราสามารถเขียนสคริปต์ทดสอบ Python อย่างง่าย คุณสามารถสร้างสคริปต์ Python ใหม่ที่เรียกว่า test.py กับ นาโน แก้ไขข้อความดังนี้:

$ nano test.py

ใส่รหัสต่อไปนี้ใน test.py ไฟล์. การนำเข้าบรรทัดที่ 1 SenseHat จาก Sense_hat โมดูล บรรทัดที่ 3 สร้าง a SenseHat วัตถุและเก็บข้อมูลอ้างอิงใน ความรู้สึก ตัวแปรและบรรทัดที่ 5-6 ตั้งค่าสีของ LED 8 × 8 ทั้งหมดเป็นสีแดง เสร็จแล้วกด + NS ติดตามโดย และ และ .

คุณสามารถเรียกใช้ test.py สคริปต์ Python ด้วยคำสั่งต่อไปนี้:

$ python3 test.py

เมทริกซ์ LED 8 × 8 ควรเรืองแสงเป็นสีแดงดังแสดงในภาพด้านล่าง

หากต้องการปิดไฟ LED ของ Sense Hat ให้เรียกใช้ แจ่มใส() วิธีที่ไม่มีค่าสีใด ๆ ใน test.py สคริปต์ Python ดังที่แสดงในภาพหน้าจอด้านล่าง และเรียกใช้ test.py สคริปต์ Python อีกครั้ง

ตอนนี้ควรปิดไฟ LED ของ Sense Hat ตามที่แสดงในภาพด้านล่าง

หาก Sense Hat ทำงานอย่างถูกต้อง ให้ไปยังส่วนถัดไป

รับข้อมูลสภาพอากาศจาก Sense Hat

คุณสามารถรับข้อมูลเซ็นเซอร์จาก Sense Hat ได้อย่างง่ายดายโดยใช้ปุ่ม ความรู้สึกหมวก ห้องสมุดไพทอน ในการดึงข้อมูลเซ็นเซอร์จาก Sense Hat คุณสามารถสร้างสคริปต์ Python ใหม่ได้ read_sensor_data.py ดังนี้

$ nano read_sensor_data.py

ใส่รหัสต่อไปนี้ใน read_sensor_data.py ไฟล์ไพทอน

จากSense_hatนำเข้าSenseHat
จาก เวลา นำเข้านอน
ความรู้สึก=SenseHat()
ความรู้สึก.แจ่มใส()
ในขณะที่ จริง:
อุณหภูมิ C=ความรู้สึก.get_temperature()
อุณหภูมิF=อุณหภูมิ *(9/5)+32
ความดัน=ความรู้สึก.get_pressure()
ความชื้น=ความรู้สึก.get_humidity()

พิมพ์('อุณหภูมิ: %.2f°C/%.2f°FNS'%(อุณหภูมิ C,อุณหภูมิF))
พิมพ์('ความดัน: %.2f mbNS'%(ความดัน))
พิมพ์('ความชื้น: %.2f%%NSNS'%(ความชื้น))
นอน(5)

เสร็จแล้วกด + NS ติดตามโดย และ และ .

ในโค้ดด้านบน บรรทัดที่ 1 และ 2 นำเข้าไลบรารีที่จำเป็นทั้งหมด บรรทัดที่ 4 สร้าง a SenseHat วัตถุและบรรทัดที่ 5 ปิดไฟ LED ทั้งหมดของ Sense Hat โดยใช้ แจ่มใส() กระบวนการ. while loop ในบรรทัดที่ 7 เป็นลูปอนันต์ที่จะรันโค้ดในบรรทัดที่ 8-16 ตลอดไป

ในบรรทัดที่ 8 get_temperature() วิธีที่ใช้ในการอ่านข้อมูลอุณหภูมิ (เป็นองศาเซลเซียส) จากเซ็นเซอร์ความชื้นของ Sense Hat ในบรรทัดที่ 9 ข้อมูลอุณหภูมิจะถูกแปลงจากองศาเซลเซียสเป็นองศาฟาเรนไฮต์ ในบรรทัดที่ 10 get_pressure() วิธีที่ใช้ในการอ่านข้อมูลความดันอากาศ (เป็นมิลลิบาร์) จากเซ็นเซอร์ความดันของ Sense Hat ในบรรทัดที่ 11 get_humidity() วิธีที่ใช้ในการอ่านข้อมูลความชื้น (เป็น%) จากเซ็นเซอร์ความชื้นของ Sense Hat

บรรทัดที่ 13–15 ใช้สำหรับพิมพ์ข้อมูลเซ็นเซอร์ไปยังคอนโซล และบรรทัดที่ 16 ใช้สำหรับรอ 5 วินาทีก่อนที่จะอ่านข้อมูลเซ็นเซอร์อีกครั้ง

คุณสามารถเรียกใช้ read_sensor_data.py สคริปต์ Python ดังต่อไปนี้:

$ python3 read_sensor_data.py

เมื่อรันสคริปต์แล้ว ข้อมูลเซ็นเซอร์จะถูกพิมพ์ไปที่คอนโซล

ตอนนี้เราสามารถอ่านข้อมูลเซ็นเซอร์จาก Sense Hat แล้ว กด + เพื่อหยุดโปรแกรม

การสร้างเว็บแอป Weather Station

ในส่วนนี้ เราจะแสดงวิธีใช้เว็บเฟรมเวิร์ก Python Flask เพื่อสร้าง API สภาพอากาศและแอปพลิเคชันสภาพอากาศ แอปพลิเคชันสภาพอากาศจะเข้าถึง API ข้อมูลสภาพอากาศและแสดงข้อมูลสภาพอากาศแบบเรียลไทม์ รหัสทั้งหมดที่กล่าวถึงในส่วนนี้มีอยู่ใน GitHub ที่ shovon8 / raspberry-pi-sense-hat-weather-app .

ขั้นแรก สร้าง a server.py สคริปต์ Python ในไดเร็กทอรีโครงการดังนี้:

$ nano server.py

ใส่รหัสต่อไปนี้ใน server.py ไฟล์ไพทอน

จากกระติกน้ำนำเข้ากระติกน้ำ
จากกระติกน้ำนำเข้าjsonify
จากกระติกน้ำนำเข้าrender_template
จากกระติกน้ำนำเข้าurl_for
จากSense_hatนำเข้าSenseHat
แอป=กระติกน้ำ(__ชื่อ__)
แอป.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
ความรู้สึก=SenseHat()
ความรู้สึก.แจ่มใส()
กับแอป.test_request_context():
url_for('คงที่',ชื่อไฟล์='สไตล์.css')
url_for('คงที่',ชื่อไฟล์='app.js')
@แอป.เส้นทาง('/ไฟ')
defไฟ():
อุณหภูมิ C=ความรู้สึก.get_temperature()
อุณหภูมิF=อุณหภูมิ *(9/5)+32
ความดัน=ความรู้สึก.get_pressure()
ความดันPsi=ความดัน *0.0145038
ความดันP=ความดัน *100
ความชื้น=ความรู้สึก.get_humidity()

กลับjsonify({
'อุณหภูมิ':{ 'ค': tempC, 'NS': tempF},
'ความดัน':{ 'เอ็มบี': ความดัน, 'hPa': ความดัน,
'ปอนด์ต่อตารางนิ้ว': ความดันPsi, 'NS': ความดันP},
'ความชื้น': ความชื้น
})
@แอป.เส้นทาง('/')
defบ้าน():
กลับrender_template('./home.html')

จากนั้นกด + NS ติดตามโดย และ และ เพื่อบันทึก server.py สคริปต์ไพทอน

ในโค้ดด้านบน บรรทัดที่ 1-5 นำเข้าไลบรารีที่จำเป็นทั้งหมด บรรทัดที่ 7 สร้างแอป Flask บรรทัดที่ 11 สร้างวัตถุ SenseHat และบรรทัดที่ 12 จะปิดไฟ LED ทั้งหมดของ Sense Hat Line 8 ปิดใช้งานการแคชเว็บสำหรับแอพ Flask เนื่องจากแอปนี้มีน้ำหนักเบา จึงไม่จำเป็นต้องแคช หากคุณต้องการแก้ไขแอป การปิดการแคชเว็บจะทำให้การทดสอบง่ายขึ้นมาก

บรรทัดที่ 18–31 อ่านข้อมูลเซ็นเซอร์จาก Sense Hat และส่งคืนข้อมูล API ในรูปแบบ JSON บนคำขอ HTTP GET ใน /ไฟ จุดสิ้นสุดของเว็บเซิร์ฟเวอร์ บรรทัดที่ 37–39 ส่งคืนโฮมเพจเว็บแอพ weather บน / จุดสิ้นสุดของเว็บเซิร์ฟเวอร์ หน้าแรกแสดงผลจาก home.html ไฟล์ซึ่งควรอยู่ในไฟล์ แม่แบบ/ ไดเร็กทอรีของไดเร็กทอรีโครงการ

บรรทัดที่ 14–16 ใช้เพื่ออนุญาตให้เข้าถึง style.css และ app.js ไฟล์แบบคงที่ ไฟล์เหล่านี้ควรอยู่ในไฟล์ คงที่/ ไดเร็กทอรีของไดเร็กทอรีโครงการ NS style.css ไฟล์ใช้เพื่อจัดรูปแบบ home.html หน้าแรกและ app.js ไฟล์ใช้เพื่อขอข้อมูล API จาก /ไฟ ปลายทางและอัปเดตข้อมูลสภาพอากาศบน home.html หน้าทุกๆ 5 วินาที

สร้าง คงที่/ และ แม่แบบ/ ไดเร็กทอรีในไดเร็กทอรีโครงการดังนี้:

$ mkdir -v {คงที่เทมเพลต}

สร้าง home.html ไฟล์ใน แม่แบบ/ ไดเร็กทอรีดังนี้:

$ nano templates/home.html

ใส่รหัสต่อไปนี้ใน home.html ไฟล์.


< html >
< ศีรษะ >
< เมต้า ชื่อ='วิวพอร์ต' เนื้อหา='ความกว้าง=ความกว้างของอุปกรณ์ มาตราส่วนเริ่มต้น=1.0'>
< ชื่อ >Raspberry Pi Weather Station</ ชื่อ >
< ลิงค์ เรล='สไตล์ชีต' พิมพ์='ข้อความ/css'
href='{{ url_for('static', file) }}'/>
</ ศีรษะ >
< ร่างกาย >
< div NS='เนื้อหา'>
< ชั่วโมง1 >Raspberry Pi Weather Station</ ชั่วโมง1 >

< div ระดับ='ข้อมูล-เนื้อหา'>
< ชั่วโมง2 >อุณหภูมิ</ ชั่วโมง2 >
< div ระดับ='แถวข้อมูล'>
< div ระดับ='เซลล์ข้อมูล' NS='อุณหภูมิ'>
...
</ div >
< div ระดับ='เซลล์ข้อมูล' NS='อุณหภูมิ'>
...
</ div >
</ div >
</ div >

< div ระดับ='ข้อมูล-เนื้อหา'>
< ชั่วโมง2 >ความดัน</ ชั่วโมง2 >
< div ระดับ='แถวข้อมูล'>
< div ระดับ='เซลล์ข้อมูล' NS='ความดัน Mb'>
...
</ div >
< div ระดับ='เซลล์ข้อมูล' NS='ความดันPsi'>
...
</ div >
</ div >
< div ระดับ='แถวข้อมูล'>
< div ระดับ='เซลล์ข้อมูล' NS='ความดันHpa'>
...
</ div >
< div ระดับ='เซลล์ข้อมูล' NS='ความดันพี'>
...
</ div >
</ div >
</ div >

< div ระดับ='ข้อมูล-เนื้อหา'>
< ชั่วโมง2 >ความชื้น</ ชั่วโมง2 >
< div ระดับ='แถวข้อมูล'>
< div ระดับ='เซลล์ข้อมูล' NS='ความชื้น'>
...
</ div >
</ div >
</ div >
</ div >

< สคริปต์ พิมพ์='ข้อความ/จาวาสคริปต์' src='{{ url_for('static', file) }}'></ สคริปต์ >
</ ร่างกาย >
</ html >

จากนั้นกด + NS ติดตามโดย และ และ เพื่อบันทึก home.html ไฟล์.

สร้าง style.css ไฟล์ใน คงที่/ ไดเร็กทอรีดังนี้:

$ nano static/style.css

ป้อนรหัสต่อไปนี้ใน style.css ไฟล์.

@นำเข้า url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
* {
การขยายความ: 0;
ระยะขอบ: 0;
ตระกูลอักษร: 'หุ่นยนต์', sans-serif;
}
ร่างกาย{
พื้นหลัง: # 737373;
}
ชั่วโมง1{
แสดง: บล็อก;
สี: #79DC7B;
text-align: ศูนย์กลาง;
ตัวอักษรน้ำหนัก: 400;
พื้นหลัง: # 000;
การขยายความ: 0.5em 0;
}
ชั่วโมง2{
แสดง: บล็อก;
พื้นหลัง: # 000;
สี: #fff;
text-align: ศูนย์กลาง;
ตัวอักษรน้ำหนัก: 400;
ขนาดตัวอักษร: 1em;
}
.data-เนื้อหา {
ระยะขอบ: 10px;
ชายแดน: 2px แข็ง สีดำ;
รัศมีชายแดน: 5px;
สีพื้นหลัง: #79DC7B;
}
.data-แถว {
แสดง:flex;
flex-direction:แถว;
}
.data-cell {
ความกว้าง: 100%;
ความสูง: 80px;
แสดง:flex;
จัดตำแหน่งรายการ: ศูนย์กลาง;
justify-เนื้อหา: ศูนย์กลาง;
ตัวอักษรน้ำหนัก: ตัวหนา;
ขนาดตัวอักษร: 1.5นาที;
สี: # 006902;
}
.data-cell:โฉบ {
พื้นหลัง: #FFE891;
สี: # AA8600;
เคอร์เซอร์: ตัวชี้;
}

จากนั้นกด + NS ติดตามโดย และ และ เพื่อบันทึก style.css ไฟล์.

สร้าง app.js ไฟล์ใน คงที่/ ไดเร็กทอรีดังนี้:

$ nano static/app.js

ใส่รหัสต่อไปนี้ใน app.js ไฟล์.

หน้าต่าง.addEventListener('โหลด',หลัก);
การทำงานหลัก() {
การทำงานgetAPIData() {
ที่ไหนhttp= ใหม่XMLHttpRequest();

http.onreadystatechange = การทำงาน() {
ถ้า(นี้.พร้อมสถานะ === 4 && นี้.สถานะ === 200) {
อัปเดต(เจสันแยกวิเคราะห์(นี้.ข้อความตอบกลับ));
}
}

http.เปิด('รับ', '/ไฟ', จริง);
http.ส่ง();
}


การทำงานอัปเดต(apiData) {
ที่ไหนอุณหภูมิ C=เอกสาร.getElementById('อุณหภูมิ');
ที่ไหนอุณหภูมิF=เอกสาร.getElementById('อุณหภูมิ');
ที่ไหนความดันMb=เอกสาร.getElementById('ความดัน Mb');
ที่ไหนความดันPsi=เอกสาร.getElementById('ความดันPsi');
ที่ไหนความดันHpa=เอกสาร.getElementById('ความดันHpa');
ที่ไหนความดันP=เอกสาร.getElementById('ความดันพี');
ที่ไหนความชื้น=เอกสาร.getElementById('ความชื้น');

อุณหภูมิ CinnerHTML =parseFloat(apiDataอุณหภูมิ.).คงที่(2) + '° C';
อุณหภูมิ FinnerHTML =parseFloat(apiDataอุณหภูมิ.NS).คงที่(2) + '°ฟ';

ความดัน MBinnerHTML =parseFloat(apiDataความดัน.mb).คงที่(2) + 'เอ็มบี';
ความดัน PsiinnerHTML =parseFloat(apiDataความดัน.psi).คงที่(2) + 'ปอนด์ต่อตารางนิ้ว';
ความดันHpa.innerHTML =parseFloat(apiDataความดัน.hPa).คงที่(2) + 'เฮปา';
ความดันP.innerHTML =parseFloat(apiDataความดัน.NS).คงที่(2) + ' NS';

ความชื้น.innerHTML =parseFloat(apiDataความชื้น).คงที่(2) + '%';
}


การทำงานแอป() {
หน้าต่าง.setInterval(การทำงาน() {
getAPIData();
}, 5000);
}

แอป();
}

จากนั้นกด + NS ติดตามโดย และ และ เพื่อบันทึก app.js ไฟล์.

ที่นี่บรรทัดที่ 1 วิ่ง หลัก() ทำงานเมื่อโหลดหน้าเว็บเสร็จ ใน หลัก() ฟังก์ชัน getAPIData () ฟังก์ชั่นดึงข้อมูลสภาพอากาศ API โดยใช้ AJAX และเรียก อัปเดต() ฟังก์ชั่น (ในบรรทัดที่ 10) เมื่อดึงข้อมูลสำเร็จแล้ว NS อัปเดต() ฟังก์ชั่นอัพเดตองค์ประกอบของหน้าเว็บโดยใช้ข้อมูล API

ในบรรทัดที่ 20 document.getElementById() ใช้เพื่อรับการอ้างอิงขององค์ประกอบหน้าเว็บด้วย id อุณหภูมิ C . บรรทัดที่ 28 ใช้เพื่อแทนที่เนื้อหาขององค์ประกอบหน้าเว็บที่มี id อุณหภูมิ C ด้วยอุณหภูมิ (ในเซลเซียส) จาก API ในทำนองเดียวกัน เนื้อหาขององค์ประกอบเว็บทั้งหมด (บรรทัดที่ 21–26) จะถูกแทนที่ด้วยข้อมูล API ที่เกี่ยวข้อง

ใน แอป() ฟังก์ชัน getAPIData () ถูกเรียกทุกๆ 5 วินาที (5,000 มิลลิวินาที) เพื่อให้ข้อมูลสภาพอากาศเป็นปัจจุบันในแอปสภาพอากาศ สุดท้ายในบรรทัดที่ 46 แอป() ฟังก์ชั่นถูกดำเนินการ

ในการทดสอบเว็บแอป ให้ป้อนคำสั่งต่อไปนี้:

$ FLASK_APP=server.py flask run --host=0.0.0.0

แอปสภาพอากาศควรทำงานบนพอร์ต 5000 (โดยค่าเริ่มต้น)

ในการทดสอบว่า Weather API ทำงานหรือไม่ ให้รันคำสั่งต่อไปนี้:

$ curl -s http://localhost:5000/api | json_pp

อย่างที่คุณเห็น ข้อมูล Weather API ถูกพิมพ์ไปยังคอนโซล ดังนั้น API จึงทำงาน

หากต้องการทดสอบแอพ Weather โปรดไปที่ http://localhost:5000 จากเว็บเบราว์เซอร์ Chromium ควรโหลดแอป Weather บนเว็บเบราว์เซอร์ แต่ไม่ควรแสดงข้อมูลสภาพอากาศในตอนแรก

หลังจากนั้นไม่กี่วินาที แอปสภาพอากาศควรดึงข้อมูลสภาพอากาศจาก API ให้เสร็จสิ้นและแสดงข้อมูลดังกล่าว

ตอนไหนก็ได้ กด + เพื่อหยุดเว็บเซิร์ฟเวอร์

การสร้าง Systemd Service สำหรับ Weather Web App

ในส่วนนี้ เราจะแสดงวิธีสร้างไฟล์บริการ systemd สำหรับแอพ weather เพื่อที่จะเริ่มทำงานโดยอัตโนมัติเมื่อทำการบูท

ขั้นแรก สร้าง a weather-station.service ในไดเร็กทอรีโครงการของคุณดังนี้:

$ nano weather-station.service

ป้อนรหัสบรรทัดต่อไปนี้ใน weather-station.service ไฟล์.

[หน่วย]
Description=เว็บแอป Raspberry Pi Weather Station โดยใช้ Raspberry Pi Sense Hat
After=network.target

[บริการ]
WorkingDirectory=/home/pi/work
Environment=FLASK_APP=server.py
สิ่งแวดล้อม=FLASK_ENV=การผลิต
ExecStart=/usr/bin/flask run --host=0.0.0.0
StandardOutput=inherit
StandardError=inherit
รีสตาร์ท=เสมอ
ผู้ใช้=pi

[ติดตั้ง]
WantedBy=multi-user.target

จากนั้นกด + NS ติดตามโดย และ และ เพื่อบันทึก weather-station.service ไฟล์.

คัดลอก weather-station.service ไฟล์ไปที่ /etc/systemd/system/ ไดเร็กทอรีด้วยคำสั่งต่อไปนี้:

$ sudo cp -v weather-station.service /etc/systemd/system/

รีโหลด systemd daemons เพื่อให้การเปลี่ยนแปลงมีผลดังนี้:

$ sudo systemctl daemon-reload

NS สถานีตรวจอากาศ บริการ systemd ควรปิดใช้งานในขณะนี้ ดังที่แสดงในภาพหน้าจอด้านล่าง

$ sudo systemctl สถานะ weather-station.service

เริ่ม สถานีตรวจอากาศ บริการด้วยคำสั่งต่อไปนี้:

$ sudo systemctl start weather-station.service

อย่างที่คุณเห็น สถานีตรวจอากาศ บริการกำลังทำงานอยู่

$ sudo systemctl สถานะ weather-station.service

ตอนนี้ที่ สถานีตรวจอากาศ บริการกำลังทำงาน คุณสามารถเพิ่มลงในการเริ่มต้นระบบของ Raspberry Pi OS ด้วยคำสั่งต่อไปนี้:

$ sudo systemctl เปิดใช้งาน weather-station.service

รีบูต Raspberry Pi ของคุณด้วยคำสั่งต่อไปนี้:

$ sudo รีบูต

เมื่อบูท Raspberry Pi ของคุณ สถานีตรวจอากาศ บริการควรจะทำงานตามที่แสดงในภาพหน้าจอด้านล่าง

$ sudo systemctl สถานะ weather-station.service

การเข้าถึงแอพ Weather จากอุปกรณ์อื่น

ในการเข้าถึงแอพพยากรณ์อากาศจากอุปกรณ์อื่นในเครือข่ายในบ้านของคุณ คุณจำเป็นต้องทราบที่อยู่ IP ของ Raspberry Pi ของคุณ คุณสามารถค้นหาที่อยู่ IP ของ Raspberry Pi 4 ได้จากอินเทอร์เฟซการจัดการเว็บของเราเตอร์ที่บ้านของคุณ ในกรณีของเรา ที่อยู่ IP คือ 192.168.0.103 แต่ที่อยู่นี้จะแตกต่างกันสำหรับคุณ ดังนั้นโปรดแทนที่ที่อยู่นี้ด้วยของคุณในขั้นตอนต่อๆ ไปทั้งหมด

หากคุณมีสิทธิ์เข้าถึงคอนโซล Raspberry Pi คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อค้นหาที่อยู่ IP ได้เช่นกัน

$ ชื่อโฮสต์ -I

เมื่อคุณทราบที่อยู่ IP ของ Raspberry Pi แล้ว คุณสามารถเข้าถึงได้จากอุปกรณ์ใดก็ได้ในเครือข่ายภายในบ้านของคุณ ตามที่แสดงในภาพหน้าจอด้านล่าง เราได้เข้าถึงแอปสภาพอากาศจากสมาร์ทโฟน Android แล้ว

บทสรุป

ในบทความนี้ เราได้แสดงวิธีใช้ Raspberry Pi Sense Hat เพื่อสร้างสถานีตรวจอากาศ Raspberry Pi เราใช้ ความรู้สึกหมวก ไลบรารี Python เพื่อดึงข้อมูลสภาพอากาศจาก Raspberry Pi Sense Hat จากนั้น เราใช้เฟรมเวิร์กเว็บขนาดเล็กของ Flask Python เพื่อสร้าง Weather API และเว็บแอปพลิเคชัน เว็บแอปรับข้อมูลสภาพอากาศจาก API สภาพอากาศทุก 5 วินาทีเพื่อให้เว็บแอปอัปเดตข้อมูลสภาพอากาศล่าสุด