กลับไปหน้ารวมไฟล์
arduino-gmail-clock-ac4d7d.md

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

ตอนนี้เราอยู่ในปี 2019 และอินเทอร์เน็ตคือศูนย์กลางของชีวิตเรา ทำไมมันจะเป็นศูนย์กลางของโปรเจกต์ของฉันไม่ได้ล่ะ? อันที่จริงโปรเจกต์นี้พึ่งพาอินเทอร์เน็ต 100% เลย

วิธีการซิงค์ Gmail

เนื่องจาก Ethernet Shield ไม่รองรับ SSL (ซึ่งปัจจุบันจำเป็นสำหรับบริการเข้าสู่ระบบเกือบทุกชนิด) ฉันจึงต้องใช้ php script บน server (อาจเป็น local หรือไม่ก็ได้) php script นี้จะดึงจำนวนอีเมลที่ยังไม่ได้อ่านจากการตอบกลับของ Gmail server (ในรูปแบบ XML) และพิมพ์จำนวนนั้นออกมาในรูปแบบนี้ (มีประโยชน์สำหรับการแยกวิเคราะห์ด้วย Arduino) mailXX โดยที่ XX คือจำนวนอีเมลที่ยังไม่ได้อ่าน นี่คือ script:

function check_email($username, $password)
{
//url to connect to
$url = "https://mail.google.com/mail/feed/atom";
// sendRequest
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlData = curl_exec($curl);
curl_close($curl);
//returning retrieved feeds
return $curlData;
}
$feeds = check_email("YOUR@EMAIL.ADDRESS", "YOURPASSWORD");
$xmlobjc = new SimpleXMLElement($feeds);
echo "mail" . $xmlobjc->fullcount[0];
?>

Arduino รับข้อมูลได้อย่างไร

สำหรับเรื่องเวลา ฉันได้คัดลอกโค้ดจาก UdpNtpClient มาใช้และมันก็ทำงานได้อย่างสมบูรณ์แบบ และสำหรับการดึงจำนวนอีเมลที่ยังไม่ได้อ่านจาก php script ฉันก็คัดลอกโค้ดจาก WebClient มาใช้เช่นกัน :P.

แต่ Arduino ต้องการดึงค่าจากสตริงการตอบกลับของ HTTP ดังนั้นฉันจึงรวมไลบรารี TextFinder เข้ามา และเมื่อติดตั้งแล้วฉันก็แค่เขียน

finder.find("mail"); 
long value1 = finder.getValue();

เพื่อรับค่าที่อยู่ถัดจากคำว่า "mail" ทันที

ความถี่ในการซิงค์

Arduino จะอัปเดตเวลาทุก 10 วินาทีเป็นจำนวน 10 ครั้ง และในการอัปเดตครั้งที่ 10 จะซิงค์จำนวนอีเมลที่ยังไม่ได้อ่านด้วย ดังนั้นทุก 100 วินาที จำนวนอีเมลจะเปลี่ยนแปลงตามอีเมลที่ยังไม่ได้อ่าน

ความปลอดภัย

เมื่อคุณเปิด Google จากเบราว์เซอร์ คุณน่าจะเห็นสิ่งนี้:

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

วิธีการสร้าง

อย่างที่คุณเห็น มันง่ายมาก เพียงแค่เสียบ Ethernet Shield เข้ากับ Arduino ของคุณ และเชื่อมต่อ LCD display (ฉันใช้จอจาก Arduino Starter Kit) ตามแผนผังนี้:

การกำหนดค่า server (ภายในเครื่อง, บน macOS)

ฉันใช้ Apache 2 server ที่ติดตั้งมาล่วงหน้าบน iMac ของฉัน แต่คุณสามารถวางไฟล์ php ลงใน server ใดก็ได้ คุณแค่ต้องการ IP address ในการกำหนดค่า server ใน macOS:

  • ดาวน์โหลดไฟล์ php
  • วางไว้ในไดเรกทอรี /Library/WebServer/
  • เปิด terminal แล้วพิมพ์ sudoapachectlrestart

ในการทดสอบ ให้พิมพ์ 172.0.0.1/nameofthefile.php ในเบราว์เซอร์ของคุณ แล้วคุณจะเห็นสตริงเช่น mail43

อย่าลืมใส่ที่อยู่อีเมลและรหัสผ่านของคุณในไฟล์ php และ IP address ของ server ใน sketch!

Command S, Command R!

ตอนนี้คุณแค่ต้องโหลดไฟล์ .ino แล้วคุณจะเห็นบางอย่างแบบนี้:

สิ่งที่ต้องทำ (TO-DOs)

ฉันคิดว่าโปรเจกต์ของฉันจะยอดเยี่ยมมากถ้ามี 3D printed enclosure

โปรเจกต์อื่นๆ

ไปดูหน้า GitHub ของฉัน ที่นี่ เพื่อดูโปรเจกต์ที่เกี่ยวข้องกับ Swift

EXPANDED TECHNICAL DETAILS

การแจ้งเตือนทางกายภาพและการเชื่อมโยงการบอกเวลา

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

  • การจับมือแบบอนุกรม Python-to-Arduino: Python script บน PC ใช้โปรโตคอล IMAP เพื่อตรวจสอบกล่องขาเข้า Gmail ของผู้ใช้ เมื่อมีอีเมลใหม่เข้ามา Python จะส่ง serial packet ไปยัง Arduino ผ่าน USB
  • ตรรกะการแจ้งเตือนตามลำดับความสำคัญ: (คุณสมบัติ) Arduino จะแสดงเวลาปัจจุบันตามปกติ แต่เมื่อได้รับ "New Mail" packet จอ LCD จะกะพริบและแสดงชื่อผู้ส่งหรือหัวเรื่องของอีเมล

การโต้ตอบ

  • แดชบอร์ดกล่องขาเข้าแบบภาพ: ใช้ I2C LCD เพื่อแสดง "จำนวนที่ยังไม่ได้อ่าน" และ "เวลาที่ได้รับล่าสุด" ทำให้สามารถจัดการอีเมลได้อย่างรวดเร็วโดยไม่ต้องเปิดเบราว์เซอร์

ข้อมูล Frontmatter ดั้งเดิม

title: "Arduino Gmail Clock"
description: "The number of unread emails and the hour on a 16x2 LCD display."
author: "fmattiussi"
category: "Internet of Things, BT & Wireless"
tags:
  - "smart appliances"
  - "internet of things"
views: 5009
likes: 1
price: 2450
difficulty: "Intermediate"
components:
  - "1x Jumper wires (generic)"
  - "1x Breadboard (generic)"
  - "1x Arduino UNO"
  - "1x Alphanumeric LCD, 16 x 2"
  - "1x Arduino Ethernet Shield 2"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/c9e19880-43ad-4225-a7f8-64b630c48989.php"
  - "https://projects.arduinocontent.cc/e487be11-ead2-44df-90fa-e2fc858ccfc1.ino"
  - "https://projects.arduinocontent.cc/c9e19880-43ad-4225-a7f8-64b630c48989.php"
  - "https://projects.arduinocontent.cc/e487be11-ead2-44df-90fa-e2fc858ccfc1.ino"
documentationLinks: []
passwordHash: "8a004216bd61085c87c1518c2c3a64bea14424de277adbcdf9a00cda33c79b55"
encryptedPayload: "U2FsdGVkX19YREdKNwPVvCIuYHxvAVzb+M+eDnY29zV0KimI3Aerxu2QptESbEG9DxPpOUwYWFscAVO2jLnqdQM7wp9ycozS/DD24JbiKnU="
seoDescription: "Build an Arduino Gmail Clock to display unread email counts and time on a 16x2 LCD display. Easy DIY IoT project for beginners."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-gmail-clock-ac4d7d_cover.jpg"
lang: "th"