สารบัญ:

Raspberry Pi Zero W Datalogger: 8 ขั้นตอน (พร้อมรูปภาพ)
Raspberry Pi Zero W Datalogger: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Raspberry Pi Zero W Datalogger: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Raspberry Pi Zero W Datalogger: 8 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Setting Up a Raspberry Pi 4 | Vilros 2024, พฤศจิกายน
Anonim
Raspberry Pi Zero W Datalogger
Raspberry Pi Zero W Datalogger

เมื่อใช้ Raspberry Pi Zero W คุณสามารถสร้างเครื่องบันทึกข้อมูลราคาถูกและใช้งานง่าย ซึ่งสามารถเชื่อมต่อกับเครือข่าย wifi ในพื้นที่ หรือทำหน้าที่เป็นจุดเชื่อมต่อในภาคสนาม ซึ่งช่วยให้คุณดาวน์โหลดข้อมูลแบบไร้สายด้วยสมาร์ทโฟนของคุณได้

ฉันนำเสนอการตั้งค่านี้ที่งาน American Geophysical Union Fall Meeting 2017 เพื่อเป็นแนวทางในการตั้งค่าเครื่องบันทึกข้อมูลของคุณเอง คุณสามารถค้นหาการนำเสนอนั้นได้ที่นี่

สิ่งที่คุณต้องการ:

  • ราสเบอร์รี่ Pi Zero W
  • การ์ด micro SD
  • สาย USB หรือแหล่งจ่ายไฟ USB
  • คอมพิวเตอร์ที่มีเครื่องอ่านการ์ด USB
  • ไม่บังคับ (แต่มีประโยชน์):

    • miniHDMI -> อะแดปเตอร์ HDMI (เพื่อเชื่อมต่อ Pi กับหน้าจอ)
    • อะแดปเตอร์ USB OTG (เพื่อเชื่อมต่อแป้นพิมพ์กับ Pi

ขั้นตอนที่ 1: ตั้งค่า Pi Zero W

ในการเริ่มต้น ให้ใส่รูปภาพ Rasbian ลงในการ์ด microSD (ในบทช่วยสอนนี้ ฉันใช้ 2017-07-05-raspbian-jessie-lite มีให้ที่นี่) สามารถใช้เวอร์ชัน Lite ได้ (ไม่มีเดสก์ท็อป) เนื่องจากการตั้งค่าจะทำผ่านบรรทัดคำสั่ง

ใส่การ์ด SD ลงใน Pi เชื่อมต่อหน้าจอและแป้นพิมพ์ และเปิดเครื่องโดยเสียบสายไฟ สามารถติดตั้ง Headless ได้ แต่ต้องเชื่อมต่อผ่าน SSH

หลังจากที่ Pi บูทการเข้าสู่ระบบแล้ว (ชื่อผู้ใช้เริ่มต้น: pi, รหัสผ่าน: ราสเบอร์รี่) และเปลี่ยนรหัสผ่านด้วยคำสั่ง "passwd"

แป้นพิมพ์สามารถกำหนดค่าได้โดยป้อน "sudo raspi-config" ในเทอร์มินัล

ขั้นตอนที่ 2: เชื่อมต่อกับ WiFi

เชื่อมต่อกับ WiFi
เชื่อมต่อกับ WiFi
เชื่อมต่อกับ WiFi
เชื่อมต่อกับ WiFi
เชื่อมต่อกับ WiFi
เชื่อมต่อกับ WiFi
เชื่อมต่อกับ WiFi
เชื่อมต่อกับ WiFi

ในการเชื่อมต่ออินเทอร์เน็ต เราจะบอก Pi ว่าจะเชื่อมต่อเครือข่ายใด เริ่มต้นด้วยการเปิดไฟล์ต่อไปนี้

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

ในที่นี้ ให้เพิ่มข้อมูลเครือข่ายที่ด้านล่าง

เครือข่าย={

ssid="ชื่อเครือข่าย" psk="รหัสผ่านเครือข่าย" }

ในกรณีของเครือข่ายองค์กร คุณสามารถใช้การตั้งค่าต่อไปนี้ (ปรับ WPA-EAP // TTLA // MSCHAPv2 เป็นการตั้งค่าที่เกี่ยวข้อง)

เครือข่าย={

ssid="ssid" #ป้อนชื่อเครือข่ายของคุณ key_mgmt=WPA-EAP eap=TTLS identity="xxxxx" #ป้อนรหัสผ่านบัญชีเข้าสู่ระบบของคุณ="xxxxx" #Enter the passwork phase2="auth=MSCHAPv2" }

บันทึกโดยกด CTRL+O และออกด้วย CTRL+X

ตอนนี้อ้างอิงไฟล์การกำหนดค่าของคุณใน /etc/network/interfaces

sudo nano /etc/network/interfaces

เปลี่ยนส่วน wlan0 เป็น:

อัตโนมัติ wlan0

iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

อีกครั้ง บันทึกไฟล์ (CTRL+O) แล้วออก (CTRL+X)

หลังจากรีบูต (รีบูต sudo) การเชื่อมต่อ wifi ของคุณควรใช้งานได้ คุณสามารถทดสอบสิ่งนี้ได้โดยการ ping เว็บไซต์

ping www.google.com

ยกเลิกการ ping ด้วย CTRL+C

ในการเชื่อมต่อกับ Pi ผ่าน SSH แบบไร้สาย คุณควรเปิดใช้งาน SSH:

sudo raspi-config

ไปที่ "5 ตัวเลือกการเชื่อมต่อ" และเปิดใช้งาน SSH จากนั้นย้อนกลับและออกจากการกำหนดค่า

ค้นหาที่อยู่ IP ของ Pi:

ifconfig

IP จะอยู่ภายใต้ "inet addr:" ของอินเทอร์เฟซ wlan0

ตอนนี้คุณสามารถเชื่อมต่อกับ Pi ผ่าน WiFi ได้ หากคุณอยู่ในเครือข่ายเดียวกัน ดาวน์โหลด Putty (สำหรับ windows) ป้อนที่อยู่ IP ที่คุณพบใน "ชื่อโฮสต์" แล้วกด "เปิด" หลังจากยอมรับคำเตือน คุณควรจะสามารถเห็นบรรทัดคำสั่งและเข้าสู่ระบบได้

ขั้นตอนที่ 3: อัปเดตและติดตั้งซอฟต์แวร์ที่จำเป็น

อัปเดตและติดตั้งซอฟต์แวร์ที่จำเป็น
อัปเดตและติดตั้งซอฟต์แวร์ที่จำเป็น
อัปเดตและติดตั้งซอฟต์แวร์ที่จำเป็น
อัปเดตและติดตั้งซอฟต์แวร์ที่จำเป็น

หลังจาก WiFi ใช้งานได้ ให้อัปเดต Pi ด้วย:

sudo apt-get update -y && sudo apt-get upgrade -y

หลังจากการอัปเดตเสร็จสิ้น (อาจใช้เวลาสักครู่) ให้ติดตั้งซอฟต์แวร์ที่เราจะใช้

sudo apt-get ติดตั้ง python3 python3-serial apache2 -y

ขั้นตอนที่ 4: เชื่อมต่อกับเซ็นเซอร์ (ในตัวอย่างนี้ Arduino)

เชื่อมต่อ Arduino กับคีย์บอร์ดโดยใช้ฮับ USB หรือเชื่อมต่อ Arduino ผ่านพอร์ต USB เดียว และทำการตั้งค่าด้วย SSH ผ่าน WiFi

เพื่อให้สามารถเข้าถึงพอร์ตอนุกรมที่ Arduino เชื่อมต่ออยู่ การให้สิทธิ์การเข้าถึงบัญชี pi เริ่มต้นนั้นมีประโยชน์ เนื่องจาก Arduino มักจะถูกกำหนดให้กับพอร์ต "/ dev/ttyACM0" ให้ใช้คำสั่งต่อไปนี้เพื่อให้ผู้ใช้ 'pi' เข้าถึงพอร์ต:

sudo chown pi: /dev/ttyACM0

สมมติว่า Arduino ได้รับการตั้งค่าให้ส่งข้อมูลผ่านพอร์ตอนุกรมแล้ว คุณสามารถดูข้อมูลใน python ได้ด้วยวิธีต่อไปนี้:

เปิดหลาม;

python3

นำเข้าซีเรียล:

นำเข้าซีเรียล

เปิดคอมพอร์ต:

ser = serial. Serial (พอร์ต = '/dev/ttyACM0', บอดเรต = 9600 หมดเวลา = 5)

โดยที่ baudrate ของ Arduino ถูกตั้งค่าเป็น 9600 ในกรณีนี้

คุณสามารถอ่านและพิมพ์บรรทัดโดยเรียกใช้รหัสต่อไปนี้:

ser.readline().decode('utf-8')

หากคุณใช้งานได้ คุณสามารถปิดการเชื่อมต่อและออกจาก Python ด้วย:

ser.close()

ทางออก()

ขั้นตอนที่ 5: ตั้งค่าความสามารถจุดเชื่อมต่อ WiFi

ด้วยการตั้งค่า Pi Zero W ของคุณในโหมดจุดเข้าใช้งาน wifi คุณสามารถเชื่อมต่อกับอุปกรณ์ wifi ใดก็ได้ ช่วยให้ตั้งค่าตัวบันทึกและดาวน์โหลดข้อมูลผ่าน wifi โดยไม่ต้องใช้สายเคเบิลหรือไดรเวอร์

สำหรับสิ่งนี้ Adafruit มีบทช่วยสอนที่ดี ข้อสังเกตเล็ก ๆ น้อย ๆ:

  • สำหรับไดรเวอร์ /etc/hostapd/hostapd.conf ให้ใช้ don't use the driver line
  • ไม่จำเป็นต้องมีขั้นตอน "อัปเดต hostapd"

หากจุดเชื่อมต่อไม่ทำงานเมื่อสิ้นสุดบทช่วยสอน ให้ลองรีบูต Pi (รีบูต sudo)

ขั้นตอนที่ 6: การสลับระหว่างจุดเชื่อมต่อ Wifi และโหมดไคลเอนต์

บางครั้ง คุณจะต้องการอัพเดตซอฟต์แวร์ หรือติดตั้งซอฟต์แวร์ใหม่บน Raspberry Pi ของคุณ แต่สิ่งนี้ต้องการการเชื่อมต่ออินเทอร์เน็ต โชคดีที่การสลับระหว่างทั้งสองนั้นง่ายมาก

เชื่อมต่อกับ Pi ด้วย SSH (ผ่านสายเคเบิล ไม่ใช่ wifi!) เริ่มต้นด้วยการหยุดบริการจุดเข้าใช้งาน:

sudo cystemctl หยุด hostapd.service

sudo cystemctl หยุด isc-dhcp-server.service

จากนั้นแก้ไขไฟล์อินเทอร์เฟซเครือข่าย:

sudo nano /etc/network/interfaces

ที่นี่คุณควรแสดงความคิดเห็นเกี่ยวกับพารามิเตอร์โฮสต์ และยกเลิกการแสดงความคิดเห็นเกี่ยวกับพารามิเตอร์การเชื่อมต่อเครือข่าย เปลี่ยนจากสิ่งนี้:

#-พารามิเตอร์การโฮสต์:

allow-hotplug wlan0 iface wlan0 inet ที่อยู่คงที่ 192.168.42.1 netmask 255.255.255.0 # - พารามิเตอร์เครือข่าย (ไคลเอนต์): #auto wlan0 # iface wlan0 inet dhcp # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

สำหรับสิ่งนี้:

#- พารามิเตอร์โฮสติ้ง:#allow-hotplug wlan0 #iface wlan0 inet คงที่ # ที่อยู่ 192.168.42.1 # netmask 255.255.255.0 # - พารามิเตอร์เครือข่าย (ไคลเอนต์): อัตโนมัติ wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

บันทึกและปิดไฟล์

ถัดไป คุณเรียกใช้คำสั่งต่อไปนี้:

sudo systemctl start wpa_supplicant.service

sudo ifdown wlan0 sudo ifup wlan0

ตอนนี้ Pi ของคุณควรเชื่อมต่อกับ wifi อีกครั้ง เพื่อให้คุณอัปเดตและติดตั้งซอฟต์แวร์ได้

หากต้องการกลับไปที่โหมดจุดเข้าใช้งาน ให้เปลี่ยนความคิดเห็นใน /etc/network/interfaces และรีบูต Pi

ขั้นตอนที่ 7: ข้อสังเกตสุดท้าย

ข้อสังเกตสุดท้าย
ข้อสังเกตสุดท้าย

การตั้งค่าเว็บไซต์

เซิร์ฟเวอร์ Apache อยู่ใน /var/www/ หากต้องการเปลี่ยนหน้าเริ่มต้น ให้แก้ไขไฟล์ /var/www/html/index.html

คุณสามารถทำให้ไฟล์ที่นี่พร้อมให้ดาวน์โหลดผ่านการเชื่อมต่อ wifi โดยไปที่เบราว์เซอร์ของคุณไปยังที่อยู่ IP ของ Pi (192.168.42.1) อุปกรณ์ที่เปิดใช้งาน wifi สามารถดาวน์โหลดได้โดยไม่ต้องใช้ซอฟต์แวร์เพิ่มเติม

การเชื่อมต่อ SFTP

ผ่าน SSH สามารถทำการเชื่อมต่อ FTP ได้ คุณสามารถใช้ Filezilla เพื่อถ่ายโอนไฟล์จำนวนมากได้อย่างรวดเร็วและง่ายดาย (ดูรูป)

นาฬิกาเรียลไทม์

เนื่องจากนาฬิกาภายในของ Pi จะเลื่อนออกไปอย่างมากหากไม่มีการเชื่อมต่ออินเทอร์เน็ต จึงจำเป็นต้องใช้โมดูลนาฬิกาตามเวลาจริง (RTC) หากจำเป็นต้องมีการบอกเวลาที่แม่นยำ หนึ่งในโมดูลดังกล่าวคือ RasClock สามารถดูคำแนะนำในการติดตั้งได้ที่นี่ นาฬิกาที่ใช้ i2c อื่น ๆ ก็มีให้เช่นกัน (เช่น DS3231)

บทสรุป

หากทุกอย่างถูกต้อง ตอนนี้คุณควรมีเครื่องบันทึกข้อมูล Pi Zero ที่ใช้งานได้! ตัวอย่างสคริปต์การบันทึกหลามจะรวมอยู่ในขั้นตอนต่อไป

ขั้นตอนที่ 8: ตัวอย่างสคริปต์การบันทึก Python

นำเข้าระบบปฏิบัติการ

นำเข้าซีเรียลจากเวลานำเข้าเวลาจากวันที่และเวลานำเข้าวันที่และเวลานำเข้า numpy เป็น np ser = serial. Serial (พอร์ต = 'COM4', baudrate = 57600, หมดเวลา = 5) ไดเร็กทอรี = r'\var\www\html\data\anemometer\WMPro1352_ ' ser.flushInput() ser.flushOutput() ลอง: ในขณะที่ True: day_timestring = datetime.strftime(datetime.now(), '%Y%m%d') file_today = directory + day_timestring + '.dat' #Read out data และรับไทม์ไลน์ทันที = ser.readline().decode('utf-8') nowtime = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:% S.%f') line = line.split(', ') ลอง: u = float(line[1]) ยกเว้น: u = np.nan ลอง: v = float(line[2]) ยกเว้น: v = np.nan ลอง: w = float(line[3]) ยกเว้น: w = np.nan ลอง: c = float(line[5]) ยกเว้น: c = np.nan Ts = 1/403 * c**2 - 273.15 ลอง: Ta = float(line[8]) ยกเว้น: Ta = np.nan if (os.path.isfile(file_today)): ด้วย open(file_today, 'a') เป็น fileobject: fileobject.write(nowtime+', ') fileobject.write(str(u)+', '+str(v)+', '+str(w)+', '+str(c)+', '+str(Ts)+', '+ str(Ta)+'\n') fileobject.clos e() อื่น: ด้วย open(file_today, 'w') เป็น fileobject: fileobject.write('"Time", "u", "v", "w", "c", "Ts", "Ta"\ n') fileobject.write(เวลานี้+', ') fileobject.write(str(u)+', '+str(v)+', '+str(w)+', '+str(c)+', '+str(Ts)+', '+str(Ta)+'\n') fileobject.close() ยกเว้น KeyboardInterrupt: ser.close()

แนะนำ: