Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่: 14 ขั้นตอน (พร้อมรูปภาพ)
Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่: 14 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่: 14 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่: 14 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Arduino IoT Cloud ESP8266 NodeMCU Alexa Home Automation system | Internet of Things projects 2021 2025, มกราคม
Anonim
Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่
Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่
Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่
Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่
Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่
Home Alert: Arduino + Cloud Messaging บนจอแสดงผลขนาดใหญ่

ในยุคของโทรศัพท์มือถือ คุณคาดหวังว่าผู้คนจะตอบสนองต่อการโทรของคุณทุกวันตลอด 24 ชั่วโมง

หรือไม่. เมื่อภรรยาของฉันกลับถึงบ้าน โทรศัพท์ยังคงฝังอยู่ในกระเป๋าถือของเธอ หรือไม่ก็แบตเตอรี่หมด เราไม่มีสายที่ดิน การโทรหรือ SMS เพื่อขอขึ้นลิฟต์กลับบ้านจากสถานีรถไฟในคืนฝนตก หรือโทรไปถามว่ากุญแจยังอยู่บนโต๊ะทำงานอยู่หรือเปล่า

ฉันมีปัญหานี้บ่อยพอที่จะรับประกันวิธีแก้ปัญหา การแก้ไขเล็กน้อยกับ Arduino และ Freetronics Dot Matrix Display (DMD) ส่งผลให้เกิดแกดเจ็ตที่น่ารำคาญ (สำหรับภรรยาของฉัน) แต่เป็นอุปกรณ์สื่อสารและศูนย์ข้อมูลที่น่าทึ่งสำหรับฉัน ฉันรักมันและมันเป็นเวอร์ชัน 1 เท่านั้น!

Home Alert ทำจากชิ้นส่วนเหล่านี้:

  • จอแสดงผล Freetronics Dot Matrix ซึ่งเป็นอาร์เรย์ LED ขนาด 16x32 พวกมันมาในสีต่างๆ แต่ฉันใช้สีแดงเพื่อเน้นว่าแกดเจ็ตนี้มีไว้สำหรับการแจ้งเตือนที่ "สำคัญ"
  • Arduino Uno พร้อม Ethernet Shield
  • การฝ่าวงล้อมนาฬิกาตามเวลาจริงเช่นนี้หรือนี้
  • ออดแบบพายโซ
  • เซ็นเซอร์อุณหภูมิและความชื้น DHT22

Home Alert ถูกควบคุมผ่านหน้าเว็บที่โฮสต์บน Heroku ซึ่งเป็นโฮสต์แอปพลิเคชันบนคลาวด์ หน้าเว็บมีการเข้ารหัสใน Ruby โดยใช้เฟรมเวิร์กแอปเว็บ Sinatra และที่เก็บคีย์-ค่า Redis

ดูที่หน้าแรก (แสดงในภาพแรกที่แนบมาในขั้นตอนนี้) ซึ่งแบบฟอร์มรอข้อความใหม่จากผู้ใช้

ฟิลด์แรกยอมรับรหัสฮาร์ดแวร์ที่เป็นตัวเลข เป็นรหัสที่ให้คุณกำหนดเป้าหมายระบบ Home Alert ที่เฉพาะเจาะจง เนื่องจากแต่ละระบบสามารถให้รหัสที่ไม่ซ้ำกันได้ หรือคุณอาจมี Home Alerts หลายรายการที่แชร์รหัสเดียวกัน เพื่อให้ข้อความเดียวกันแสดงในสถานที่ต่างๆ หลายแห่ง

ข้อความที่คุณต้องการแสดงจะไปที่ช่องที่สอง ข้อความที่คุณพิมพ์จะปรากฏใน DMD

หากคุณต้องการส่งเสียง ให้เลือก ใช่! ช่องทำเครื่องหมายและเสียงกริ่งจะได้รับความสนใจจากทุกคนในบริเวณใกล้เคียง

ในบทความนี้ ฉันจะแสดงวิธีสร้างระบบ Home Alert ของคุณเอง ทั้งฮาร์ดแวร์และซอฟต์แวร์ Arduino รวมถึงเว็บแอปพลิเคชัน Sinatra mini

มาเริ่มกันเลย!

ขั้นตอนที่ 1: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์

DMD เป็นจุดโฟกัสของแกดเจ็ต ฉันสามารถใช้จอ LCD ขนาดเล็กได้ แต่แนวคิดหลักสำหรับโครงการนี้คือการสร้างสิ่งที่มองเห็นและได้ยินจากระยะไกล ในส่วนของภาพ ฉันต้องการบางอย่างที่ใหญ่และสว่าง และจอแสดงผล Freetronics นี้ก็เป็นสิ่งที่ฉันต้องการจริงๆ แต่ละแผงมีอาร์เรย์ LED ขนาด 16x32 และคุณสามารถรวมหลายรายการเข้าด้วยกันเพื่อสร้างจอแสดงผลขนาดใหญ่ขึ้น นี่คือสิ่งที่ฉันต้องการจะทำในอนาคตอันใกล้นี้

DMD มาพร้อมกับไลบรารี Arduino ที่ใช้งานง่าย มันสื่อสารกับ Arduino ผ่าน SPI ความเร็วสูง ฉันสามารถรับห้องสมุดได้จากหน้า Freetronics Github จากนั้นเปิดร่างการสาธิตและทำให้มันทำงานภายในไม่กี่นาทีหลังจากเปิดกล่อง ฉันรู้สึกประหลาดใจที่เห็นหน้าจอสว่างโดยใช้พลังงานจาก Arduino เท่านั้น หากคุณต้องการทำให้ผู้ดูตาบอดชั่วคราว คุณสามารถแนบพาวเวอร์ซัพพลายเฉพาะเข้ากับ DMD นี้ได้ หากสิ่งนี้ไม่ได้รับความสนใจก็จะไม่มีอะไรเกิดขึ้น!

ทางกายภาพ จอแสดงผลนี้มีขนาด 320 มม. (W), 160 มม. (H) และ 14 มม. (D)

แผงด้านหลังประกอบด้วยขั้วต่อสำหรับไฟภายนอก 5V ที่มีความจุอย่างน้อย 4Amps ขั้วต่อ Arduino ที่มีเครื่องหมาย HUB1 และขั้วต่อสำหรับการแสดงผลเพิ่มเติมแบบเดซี่เชนที่ฝั่งตรงข้าม ตามเอกสารประกอบ คุณสามารถเชื่อมต่อ DMD แบบเดซี่เชนได้สูงสุดสี่ตัว

DMD ถูกควบคุมโดย Arduino Uno Freetronics มีตัวเชื่อมต่อ “DMDCON” ที่สะดวกมาก ซึ่งเพียงแค่ยึดเข้ากับ SPI และดาต้าพินที่ถูกต้องโดยตรง

นอกเหนือจาก DMD แล้ว ฉันใช้ Arduino Uno, Ethernet Shield, การฝ่าวงล้อมของนาฬิกาแบบเรียลไทม์, ออด และ DHT22 สำหรับองค์ประกอบทั้งหมดเหล่านี้ ฉันได้สร้างการบรรยายที่อธิบายการทำงานของพวกเขาในหลักสูตร Udemy ของฉัน (การโปรโมตตัวเองอย่างไร้ยางอาย: ลงชื่อสมัครใช้รายชื่ออีเมลของฉันที่ arduinosbs.com และรับคูปองที่มอบส่วนลดในการเข้าถึงการบรรยายทั้งหมด 55 รายการ)

นาฬิกาเรียลไทม์ซึ่งเป็นการฝ่าวงล้อมตาม IC นาฬิกา DS18072 เป็นอุปกรณ์ I2C ดังนั้นจึงเชื่อมต่อกับพินอะนาล็อก 1 และ 2 ของ Uno ซึ่งใช้บัส I2C

ออดเชื่อมต่อกับพินดิจิตอล 3 จากตำแหน่งที่ฉันควบคุมโดยใช้ฟังก์ชัน tone()

เซ็นเซอร์ DHT22 เชื่อมต่อกับพินดิจิตอล 2 โปรดใช้ความระมัดระวังในการเชื่อมต่อตัวต้านทานแบบดึงขึ้น 10KΩ ระหว่างสาย 5V และสายข้อมูล

ขั้นตอนที่ 2: Arduino Sketch

ภาพร่างนั้นไม่ใหญ่ในแง่ของจำนวนบรรทัด แต่มันเกือบจะทำให้หน่วยความจำแฟลชที่มีอยู่ของ Uno หมดลงด้วยไลบรารีที่รวมไว้ทั้งหมด มีพื้นที่มากมายสำหรับการเพิ่มประสิทธิภาพหน่วยความจำ แต่เนื่องจากฉันอยู่ในขั้นตอนการสร้างต้นแบบ นั่นเป็นโครงการสำหรับวันอื่น รหัสนี้มีอยู่ใน Github

นี่คือภาพร่างพร้อมความคิดเห็นที่ฝังไว้ (ดูไฟล์แนบ PDF)

ความรับผิดชอบหลักของร่างนี้คือการทำให้ Arduino เป็นผู้บริโภคบริการเว็บ บริการเว็บเป็นเว็บไซต์ธรรมดาที่มีจุดสิ้นสุดสองจุด จุดแรกให้ผู้ใช้ที่เป็นมนุษย์เข้าถึงผ่านเว็บเบราว์เซอร์และส่งสตริงข้อความที่ต้องการแสดงบน DMD และอีกจุดหนึ่งที่ Arduino จะเข้าถึงเพื่อ ดึงสตริงข้อความนั้น

โปรดดาวน์โหลดและอ่านไฟล์ PDF ที่แนบมา ซึ่งมีข้อคิดเห็นแบบฝังที่อธิบายการทำงาน

ขั้นตอนที่ 3: ซินาตราขึ้นเวที

ซินาตราขึ้นเวที!
ซินาตราขึ้นเวที!

มีหลายวิธีในการสร้างเว็บไซต์และบริการเว็บ ตั้งแต่ภาษาการเขียนโปรแกรมที่มีไลบรารีที่รองรับเว็บ ไปจนถึงเฟรมเวิร์กที่มีคุณสมบัติครบถ้วน อาจสร้างความสับสนและยากที่จะเลือกหนึ่งอันสำหรับงานนี้

ฉันได้ใช้และเล่นกับเทคโนโลยีเว็บแอปพลิเคชั่นมาพอสมควร และพบว่าซินาตราเหมาะสำหรับการสร้างบริการเว็บและเว็บไซต์ขนาดเล็ก โดยเฉพาะอย่างยิ่ง เมื่อฉันสร้างบริการเว็บเพื่อรองรับแกดเจ็ต Arduino Sinatra เป็นตัวเลือกที่ดีจริงๆ

ซินาตราคืออะไร และเหตุใดจึงเป็นตัวเลือกที่ดี ฉันดีใจที่คุณถาม!

Sinatra เป็นภาษาสำหรับการพัฒนาเว็บแอปพลิเคชันอย่างรวดเร็ว มันสร้างขึ้นจาก Ruby ซึ่งเป็นภาษาสคริปต์สำหรับวัตถุประสงค์ทั่วไปที่ได้รับความนิยมและแสดงออกอย่างชัดเจน คุณอาจได้ยินว่าซินาตราถูกเรียกว่า “DSL” ซึ่งเป็นภาษาเฉพาะของโดเมน โดเมนที่นี่คือเว็บ คำหลัก (คำ) และไวยากรณ์ที่สร้างขึ้นสำหรับซินาตราทำให้ผู้คนสร้างแอปพลิเคชันเว็บได้ง่ายและรวดเร็ว

ในช่วงเวลาที่เรียกว่าเฟรมเวิร์กที่ "มีความคิดเห็น" สำหรับการพัฒนาเว็บแอปอย่าง Ruby on Rails และ Django ที่ได้รับความนิยมอย่างมาก Sinatra ได้รวบรวมจุดสิ้นสุดของสเปกตรัม ในขณะที่ Ruby on Rails และ Django ต้องการให้โปรแกรมเมอร์ปฏิบัติตามแบบแผนและวิธีการทำสิ่งต่างๆ ที่เฉพาะเจาะจง (ซึ่งหมายถึงเส้นโค้งการเรียนรู้ที่สูงชันและยาวนาน) Sinatra ไม่ได้กำหนดข้อกำหนดดังกล่าว

ซินาตรามีแนวคิดที่ง่ายกว่า Rails และ Djangos ของโลกมาก คุณสามารถเริ่มต้นใช้งานเว็บแอปพลิเคชันที่สามารถโต้ตอบกับ Arduino ของคุณได้ภายในไม่กี่นาที

ฉันจะสาธิตด้วยตัวอย่าง นี่คือสิ่งที่เว็บแอปขั้นต่ำของ Sinatra ดูเหมือน (โปรดอ่านข้อมูลต่อไปนี้ในตอนนี้ อย่าทำสิ่งนี้บนคอมพิวเตอร์ของคุณจริงๆ เพราะคุณอาจยังไม่มีข้อกำหนดเบื้องต้นสำหรับการตั้งค่านี้):

ในไฟล์เดียว เรียกมันว่า my_app.rb เพิ่มข้อความนี้:

ต้องการ 'sinatra'get '/' ทำ "Hello, world!"end

บนบรรทัดคำสั่ง ให้เริ่มแอปดังนี้:

ruby my_app.rb

แอปของคุณจะเริ่มทำงาน และคุณจะเห็นข้อความนี้ในคอนโซล:

peter@ubuntu-dev:~/arduino/sinatra_demo$ ruby my_app.rbPuma 2.8.1 กำลังเริ่ม…* เธรดขั้นต่ำ: 0, เธรดสูงสุด: 16* สภาพแวดล้อม: การพัฒนา* กำลังฟังบน tcp://localhost:4567== Sinatra/1.4.4 ขึ้นแท่นบน 4567 เพื่อพัฒนาด้วยการสำรองข้อมูลจาก Puma

แอปพร้อมที่จะรับคำขอของลูกค้าแล้ว เปิดเบราว์เซอร์ ชี้ไปที่ https://localhost:4567 และนี่คือสิ่งที่คุณจะเห็น (ดูภาพหน้าจอที่แนบมา)

นั่นคือโค้ดง่ายๆ สี่บรรทัดในไฟล์เดียว ในทางตรงกันข้าม Rails จะต้องการไฟล์มากกว่าร้อยไฟล์ ซึ่งสร้างขึ้นเพียงเพื่อให้เป็นไปตามข้อกำหนดของเฟรมเวิร์ก อย่าเข้าใจฉันผิด ฉันรัก Rails แต่จริงเหรอ?…

ดังนั้น ซินาตราจึงเรียบง่ายและดำเนินการได้รวดเร็ว ฉันจะถือว่าคุณไม่รู้อะไรเกี่ยวกับ Ruby, Sinatra และการปรับใช้แอปพลิเคชันกับ Cloud ดังนั้นในหัวข้อถัดไป ฉันจะนำคุณทีละขั้นตอนจากศูนย์ไปจนถึงการปรับใช้บริการเว็บ Arduino ของคุณไปยัง Cloud

ขั้นตอนที่ 4: ตั้งค่าเครื่องพัฒนาของคุณ

ซินาตราใช้ภาษาการเขียนโปรแกรม Ruby ดังนั้น คุณต้องติดตั้ง Ruby ก่อนจึงจะติดตั้ง Sinatra

คุณจะต้องติดตั้งเซิร์ฟเวอร์ที่เก็บคีย์-ค่าที่เรียกว่า Redis คิดว่า Redis เป็นฐานข้อมูลที่เก็บข้อมูลเทียบกับคีย์ คุณใช้คีย์เพื่อดึงข้อมูล และได้รับการปรับให้เหมาะสมสำหรับความเร็วมากกว่าความยืดหยุ่นของโครงสร้างข้อมูลที่ฐานข้อมูลเชิงสัมพันธ์แบบเดิมได้รับการออกแบบมา Home Alert เก็บข้อความไว้ใน Redis

ขั้นตอนที่ 5: Ruby บน Mac หรือ Linux

หากคุณใช้คอมพิวเตอร์ Mac หรือ Linux ฉันแนะนำให้คุณใช้ RVM เพื่อติดตั้งและจัดการการติดตั้ง Ruby ของคุณ (RVM: Ruby Version Manager) คำแนะนำในการติดตั้ง Ruby ด้วย RVM อยู่ในหน้านี้ หรือเพียงแค่คัดลอกและวางคำสั่งนี้ในเชลล์ของคุณ:

curl -sSL https://get.rvm.io | bash -s เสถียร --ruby

นั่ง เอนหลัง ผ่อนคลาย และรอให้การดาวน์โหลด รวบรวม และติดตั้ง RVM และ Ruby เสร็จสมบูรณ์

ขั้นตอนที่ 6: Ruby บน Windows

หากคุณใช้ Windows ฉันแนะนำให้ทำตามคำแนะนำนี้บนเว็บไซต์ Ruby Installer สำหรับ Windows และใช้แอปพลิเคชันการตั้งค่า

ขั้นตอนที่ 7: ตรวจสอบและตั้งค่า Ruby. ของคุณ

ในขณะที่เขียน Ruby ที่เสถียรล่าสุดคือ 2.1.1.p76 คุณสามารถตรวจสอบเวอร์ชันที่ติดตั้งด้วย RVM ได้โดยพิมพ์สิ่งนี้:

ข้อมูล rvm

ข้อมูลมากมายเกี่ยวกับ RVM และ Ruby จะปรากฏขึ้น ในกรณีของฉัน นี่คือส่วน Ruby:

ruby: ล่าม: "ruby" เวอร์ชัน: "2.1.1p76" วันที่: "2014-02-24" แพลตฟอร์ม: "x86_64-linux" patchlevel: "2014-02-24 revision 45161" full_version: "ruby 2.1.1p76 (2014) -02-24 แก้ไข 45161) [x86_64-linux]"

ฉันแนะนำให้คุณใช้ Ruby 2.1.1 ด้วย ดังนั้นหากคุณเห็นอะไรที่เก่ากว่านั้น ให้อัปเกรดดังนี้:

rvm ติดตั้ง 2.1.1

สิ่งนี้จะติดตั้ง Ruby 2.1.1 ไซต์โครงการ RVM มีข้อมูลมากมายเกี่ยวกับ RVM และวิธีจัดการการติดตั้ง Ruby ของคุณ

ขั้นตอนที่ 8: ติดตั้ง Sinatra (ทุกแพลตฟอร์ม)

ใน Ruby รหัสจะถูกแชร์เป็นแพ็คเกจที่เรียกว่า “gems” รหัสที่ประกอบเป็นซินาตราสามารถติดตั้งบนคอมพิวเตอร์ของคุณเป็นอัญมณีดังนี้:

พลอย ติดตั้ง sinatra

บรรทัดนี้จะดึงโค้ดและเอกสารประกอบทั้งหมดและติดตั้งลงในคอมพิวเตอร์ของคุณ

ขั้นตอนที่ 9: Redis บน Mac หรือ Linux

การตั้งค่า Redis บน Mac หรือ Linux นั้นง่ายมาก กระบวนการนี้อธิบายไว้บนเว็บไซต์ Redis เปิดเชลล์เทอร์มินัลแล้วพิมพ์คำสั่งเหล่านี้:

$ wget https://download.redis.io/releases/redis-2.8.7.tar…$ tar xzf redis-2.8.7.tar.gz$ cd redis-2.8.7$ ทำ

เรียกใช้ Redis โดยพิมพ์:

$ src/เซิร์ฟเวอร์ redis

… และคุณทำเสร็จแล้ว!

ขั้นตอนที่ 10: Redis บน Windows

แนะนำให้ใช้ Redis บน Windows สำหรับการพัฒนาเท่านั้น และคุณจะต้องคอมไพล์โดยใช้สภาพแวดล้อมการพัฒนา Visual Studio Express ฟรี ต้องใช้เวลาสักเล็กน้อยในการดำเนินการ แต่ใช้งานได้ดีและคุ้มค่ากับความพยายาม ทำตามคำแนะนำในหน้า Github ของโครงการ ที่นั่น คุณจะพบลิงก์ไปยังหน้า Visual Studio Express

ขั้นตอนที่ 11: สร้างแอปพลิเคชันบริการเว็บ

สร้างแอปพลิเคชันบริการเว็บ
สร้างแอปพลิเคชันบริการเว็บ

มาสร้างแอปพลิเคชันและรันบนเครื่องพัฒนาของคุณกัน เราจะปรับร่าง Arduino เพื่อเชื่อมต่อกับอินสแตนซ์ของแอปพลิเคชันนี้ในขณะที่เราทดสอบ เมื่อเราพอใจที่ทุกอย่างทำงานได้ดี เราจะปรับใช้กับคลาวด์และอัปเดตภาพร่างเพื่อใช้อินสแตนซ์คลาวด์

นี่คือรหัส Ruby ทั้งหมดในไฟล์เดียวชื่อ " web.rb " (รหัสนี้มีอยู่ใน Github)

สำคัญ: ดาวน์โหลดและอ่านไฟล์ PDF ที่แนบมา ซึ่งมีข้อคิดเห็นแบบฝังโดยละเอียด (โปรดดำเนินการนี้ก่อนที่จะดำเนินการต่อ!)

ตอนนี้คุณสามารถลองใช้ระบบ Home Alert ของคุณได้แล้ว ในภาพสเก็ตช์ของคุณ ให้เปลี่ยนค่าคงที่เว็บไซต์และเว็บเพจให้ชี้ไปที่เครื่องพัฒนาและหมายเลขพอร์ตสำหรับเซิร์ฟเวอร์ Sinatra การพัฒนาของคุณ ในกรณีของฉัน ฉันมีเครื่องสำหรับการพัฒนาบน IP 172.16.115.136 และเซิร์ฟเวอร์การพัฒนา Sinatra กำลังฟังพอร์ต 5000 ดังนั้นการตั้งค่าแบบร่างของฉันคือ:

#define HW_ID "123"#define WEBSITE “172.16.115.136:5000”#define WEBPAGE “/get_message/"

ที่อยู่ IP นี้สามารถเข้าถึงได้เฉพาะสำหรับอุปกรณ์ในเครือข่ายในบ้านของฉัน

การตั้งค่า HW_ID แสดงถึง "รหัสฮาร์ดแวร์" นั่นคือ ID ที่ Arduino ควบคุม DMD จะระบุตัวเองในแอปพลิเคชัน Sinatra เป็นการพิสูจน์ตัวตนแบบพื้นฐาน เว็บแอปพลิเคชันจะส่งข้อความไปยัง Arduino เพื่อขอตาม HW_ID ที่ให้มา คุณสามารถมีอุปกรณ์หลายเครื่องที่มี HW_ID เดียวกัน ในกรณีนี้อุปกรณ์ทั้งหมดจะแสดงข้อความเดียวกัน หากคุณต้องการ "ความเป็นส่วนตัว" ให้เลือก ID ที่มีอักขระสุ่มจำนวนมากที่คนอื่นไม่สามารถคาดเดาได้ ระวังด้วยว่าไม่มีการเข้ารหัสการสื่อสารใด ๆ

ตอนนี้ไปข้างหน้าและเริ่มต้นแอป Sinatra ของคุณพิมพ์สิ่งนี้ (สมมติว่าคุณอยู่ในโฟลเดอร์โครงการ Sinatra):

ruby web.rb

… และคุณจะเห็นสิ่งนี้ (รายละเอียดบางอย่างอาจแตกต่างกันไป ตราบใดที่สิ่งนี้ไม่ขัดข้อง คุณก็ไม่เป็นไร):

10:42:18 web.1 | เริ่มต้นด้วย pid 4911910:42:18 web.1 | Puma 2.8.1 เริ่ม…10:42:18 web.1 | * เธรดขั้นต่ำ: 0, เธรดสูงสุด: 1610:42:18 web.1 | * สภาพแวดล้อม: development10:42:18 web.1 | * ฟังใน tcp://0.0.0.0:5000

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

อัปโหลดภาพสเก็ตช์ของคุณไปยัง Arduino ตรวจสอบให้แน่ใจว่าได้เชื่อมต่อกับเครือข่ายท้องถิ่นของคุณ หากทุกอย่างเป็นไปด้วยดี Arduino จะสำรวจบริการเว็บของคุณทุกๆ นาที ให้ข้อความแสดง: ในฟิลด์รหัส HW ให้พิมพ์ ID เดียวกับที่คุณตั้งค่าสำหรับค่าคงที่ HW_ID ในแบบร่าง พิมพ์อะไรก็ได้ในช่อง "ข้อความของคุณ" และทำเครื่องหมายที่ "Buzz?" ช่องทำเครื่องหมาย

ส่ง รอสักครู่ และดูข้อความของคุณปรากฏใน DMD!

ขั้นตอนที่ 12: ปรับใช้กับคลาวด์โดยใช้ Heroku

ตอนนี้ Home Alert กำลังทำงานอยู่ในระหว่างการพัฒนา มาทำงานบนคลาวด์กันเถอะ มีตัวเลือกมากมายสำหรับการปรับใช้เว็บแอปพลิเคชัน จากขอบเขตและความซับซ้อนของ Home Alert ฉันตัดสินใจว่าการตั้งค่าเซิร์ฟเวอร์ส่วนตัวเสมือนของฉันไม่คุ้มกับความพยายาม ทางที่ดีควรไปใช้บริการอย่าง Heroku ซึ่งเป็นโฮสต์ของแอปพลิเคชันแทน สำหรับขนาดของฉัน Heroku ฟรีเทียร์นั้นมากเกินพอ แม้แต่สำหรับองค์ประกอบ Redis ฉันก็สามารถเลือกแผนบริการฟรีจากผู้ให้บริการ Redis รายใดรายหนึ่งที่ทำงานร่วมกับ Heroku ได้

ยังมีความพยายามอยู่บ้าง ซึ่งเกี่ยวข้องกับการแก้ไขแอปพลิเคชันของฉันเล็กน้อย เพื่อให้เป็นไปตามข้อกำหนดของ Heroku รายละเอียดอยู่ที่นี่ แต่โดยพื้นฐานแล้ว คุณจะต้องเพิ่มไฟล์เหล่านี้ในโครงการ Sinatra ของคุณ (ไฟล์ทั้งหมดที่ตามมาสามารถดาวน์โหลดได้จากบัญชี Github ของฉัน):

* config.ru: มันบอก Heroku ว่าไฟล์ใดมีแอปพลิเคชันอยู่ นี่คือเนื้อหา:

ต้องการ './web'run Sinatra::Application

บรรทัดแรกชี้ไปที่ web.rb และบรรทัดที่สองเรียกใช้แอปพลิเคชันของคุณจริงๆ

* Gemfile: ประกอบด้วย Gems (แพ็คเกจรหัสทับทิม) ที่แอปพลิเคชันต้องการ Heroku จะดูภายในไฟล์นี้เพื่อค้นหาว่าโค้ดอื่นใดที่ต้องติดตั้งเพื่อให้แอปพลิเคชันของคุณทำงานได้ อีกวิธีในการดู Gemfile คือมีรายการการพึ่งพาสำหรับโครงการของคุณ หากไม่มีการอ้างอิงใด ๆ เหล่านี้ แอปพลิเคชันของคุณจะไม่ทำงาน นี่คือสิ่งที่อยู่ภายใน Gemfile สำหรับแอพนี้:

แหล่งที่มา "https://rubygems.org"ruby "2.1.1"gem 'sinatra'gem 'puma'gem 'redis'

ขั้นแรก จะตั้งค่าที่เก็บซอร์สของโค้ด Gem ทั้งหมดเป็น rubygems.org ถัดมาก็ต้องใช้ Ruby เวอร์ชั่น 2.1.1 เพื่อรันแอพพลิเคชั่น จากนั้นจะแสดงรายการอัญมณีที่ต้องการ: Sinatra, Puma (เซิร์ฟเวอร์แอปพลิเคชันเว็บ Ruby ที่ยอดเยี่ยม) และ Redis

* Procfile: มันบอก Heroku ถึงวิธีการเริ่มต้นเซิร์ฟเวอร์ของคุณ มีเพียงหนึ่งบรรทัดที่นี่:

เว็บ: rackup -s puma -p $PORT

บรรทัดนี้ระบุว่า "เว็บ" เป็นบริการประเภทเดียวที่จำเป็น (คุณสามารถให้บริการอื่น ๆ เช่น "พนักงาน" สำหรับการประมวลผลพื้นหลัง) และเพื่อเริ่มบริการ Heroku ต้องใช้คำสั่งที่มาหลัง ":"

คุณสามารถจำลองสิ่งที่ Heroku จะทำโดยทำตามลำดับนี้บนเครื่องพัฒนาของคุณ (พิมพ์การทดสอบก่อนลูกศรเท่านั้น สิ่งที่ตามหลังลูกศรเป็นเพียงคำอธิบายของคำสั่งเท่านั้น):

$>gem install bundler -> ติดตั้ง Bundler ซึ่งรู้วิธีจัดการกับ Gemfile $> การติดตั้งบันเดิล -> Bundler ประมวลผล Gemfile และติดตั้งการพึ่งพา $> rackup config.ru -> Rackup เป็นเครื่องมือที่สามารถประมวลผลไฟล์ config.ru โดยปกติแล้วจะมาพร้อมกับ Ruby เวอร์ชันที่ใหม่กว่า หากไม่สามารถติดตั้งได้ดังนี้: gem install rack

ขั้นตอนสุดท้ายส่งผลให้เกิดการเปิดตัวแอปพลิเคชันของคุณจริงๆ คุณควรเห็นผลลัพธ์ที่เหมือนกันทุกประการเมื่อคุณเริ่มต้นด้วย ruby web.rb ก่อนหน้านี้ เป็นแอปพลิเคชันเดียวกันที่ทำงานอยู่ เพียงแต่มีความแตกต่างที่วิธีที่สองคือวิธีที่ Heroku เริ่มทำงาน

เราเกือบพร้อมที่จะปรับใช้แอปพลิเคชันนี้กับบัญชี Heroku ของคุณแล้ว หากคุณยังไม่มี ให้สร้างตอนนี้เลย จากนั้น ทำตามคำแนะนำเริ่มต้นอย่างรวดเร็วเพื่อตั้งค่าบัญชีและเครื่องพัฒนาในพื้นที่ของคุณ โดยเฉพาะอย่างยิ่ง Heroku Toolbelt

Heroku Toolbelt ติดตั้งไคลเอ็นต์บรรทัดคำสั่ง Heroku, Git (ระบบจัดการรหัสโอเพ่นซอร์ส) และ Foreman (เครื่องมือ Ruby ที่ช่วยจัดการแอปพลิเคชันที่ใช้ Procfile)

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

$>heroku login -> เข้าสู่ระบบ Heroku ผ่านบรรทัดคำสั่ง $>git init -> Initialise a Git repository สำหรับแอปพลิเคชันของคุณ $>git add -> (สังเกตจุด!) เพิ่มไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบันไปยังที่เก็บ Git $>git commit -m “init" -> คอมมิตไฟล์เหล่านี้ลงในที่เก็บ พร้อมข้อความใหม่ $>heroku create -> Create a new แอปบน Heroku Heroku จะสุ่มชื่อแอปของคุณ เช่น "blazing-galaxy-997" จดชื่อและ URL ไว้เพื่อให้คุณสามารถเข้าถึงได้ผ่านทางเว็บเบราว์เซอร์ของคุณในภายหลังURL นี้จะมีลักษณะดังนี้: “https://blazing-galaxy-997.herokuapp.com/“คุณจะต้องคัดลอกชื่อโฮสต์ (ส่วน "blazing-galaxy-997.herokuapp.com") ของแอปพลิเคชันใหม่ของคุณลงในค่าคงที่ WEBSITE ของร่าง Arduino ของคุณ ทำตอนนี้เพื่อที่คุณจะได้ไม่ลืมในภายหลัง $> heroku addons:add rediscloud -> เพิ่มระดับฟรีของบริการ Rediscloud Redis ให้กับแอปพลิเคชันของคุณ การตั้งค่าการกำหนดค่าจะถูกสร้างขึ้นโดยอัตโนมัติและพร้อมใช้งานสำหรับแอปพลิเคชันของคุณ $> git push heroku master -> ปรับใช้รหัสของคุณกับ Heroku การดำเนินการนี้จะโอนรหัสโดยอัตโนมัติ ตั้งค่าการพึ่งพา Heroku และเริ่มแอปพลิเคชัน ในตอนท้ายของกระบวนการ คุณจะเห็นบางสิ่งเช่นนี้: “https://blazing-galaxy-997.herokuapp.com ปรับใช้กับ Heroku” ซึ่งหมายความว่าขณะนี้แอปพลิเคชันของคุณใช้งานได้บนคลาวด์สาธารณะแล้ว! ยินดีด้วย!

ไปข้างหน้าให้มันหมุน!

ขั้นตอนที่ 13: นำทุกอย่างมารวมกัน

เมื่อใช้งานเว็บแอปพลิเคชันของคุณแล้ว ให้อัปโหลดภาพสเก็ตช์ที่อัปเดตไปยัง Arduino (จำไว้ว่าคุณอัปเดตค่าคงที่ WEBSITE เพื่อชี้ไปที่อินสแตนซ์ที่ใช้งานจริงของเว็บแอปพลิเคชัน)

ใช้เบราว์เซอร์ของคุณเพื่อเข้าถึงแอปของคุณบน Heroku เช่นเดียวกับในบทนำ ให้พิมพ์ ID ฮาร์ดแวร์ของคุณในกล่องข้อความแรก ข้อความของคุณในกล่องที่สอง และทำเครื่องหมายที่ช่องทำเครื่องหมายเพื่อเปิดใช้งานออด

ข้อความของคุณจะปรากฏบน DMD ประมาณหนึ่งนาทีต่อมาหากทุกอย่างเป็นไปด้วยดี!

ขั้นตอนที่ 14: ศักยภาพ

มีอะไรอีกมากมายที่คุณสามารถทำได้ด้วยระบบ Home Alert ของคุณ…

การมีแบ็คเอนด์ของ Heroku หมายความว่าคุณสามารถเพิ่มตรรกะได้มากมายที่สามารถเพิ่มฟังก์ชันการทำงานที่น่าทึ่งได้ ตัวอย่างเช่น คุณสามารถเพิ่มความสามารถให้แอปพลิเคชันจัดการการแจ้งเตือนซ้ำ การตอบรับ หรือควบคุมฮาร์ดแวร์การแจ้งเตือนเพิ่มเติม เช่น ไฟแฟลช เป็นต้น คุณสามารถขยายไปยังระบบอัตโนมัติภายในบ้านและควบคุมไฟและประตูได้ คุณสามารถเพิ่ม DMD หลายรายการเพื่อแสดงข้อความที่แตกต่างกันในแต่ละข้อความหรือข้อความเดียวในจอแสดงผลขนาดใหญ่ที่รวมกัน ฉันแค่เกาพื้นผิวของสิ่งที่เป็นไปได้ที่นี่!

สนุก!