ฉันเริ่มเรียนรู้ภาษาโปรแกรมเมื่อหลายปีก่อนด้วย 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 เพื่อแสดง "จำนวนที่ยังไม่ได้อ่าน" และ "เวลาที่ได้รับล่าสุด" ทำให้สามารถจัดการอีเมลได้อย่างรวดเร็วโดยไม่ต้องเปิดเบราว์เซอร์