TTGO

การดัดแปลงเครื่องวัดอุณหภูมิหน้าร้านสะดวกซื้อให้เป็น AIIoT ตอนที่ #1

สวัสดีครับวันนี้ทาง Maker [LAB] จะมาเล่าเรื่องราวของการดัดแปลงเครื่องวัดอุณหภูมิรุ่นยอดนิยมที่เราพบได้ตามหน้าร้านสะดวกซื้อทั่วไป จนตอนนี้เริ่มใช้กับตามอาคารต่างๆแล้วด้วย โดยเราเริ่มเล่าตั้งแต่การเริ่มแกะค่าที่ส่งออกจากเครื่องวัดว่าค่าที่มันส่งมาคืออะไร แปลงค่ายังไง ไปจนถึงการแกะชำแหละดูวงจรข้างในว่าเราจะหาทางดัดแปลงมันยังไงได้บ้าง เอาบอร์ด TTGO ESP32 มาต่อยังไงและโปรแกรมตัวอย่างง่ายๆ เขียนอย่างไร พร้อมแล้วใช่มั้ยครับ พร้อมแล้วก็มาลองไปด้วยกันเลย มาทำความรู้จักกับเครื่องวัดก่อนแงะก่อน เครื่องที่ทาง Maker [LAB] นำมาทดลองใช้งานคือเครื่องวัดรุ่น K3 สำหรับยี่ห้อไม่ปรากฎแน่ชัดครับ ตาม specs ที่ระบุไว้ที่ตัวเครื่องคือ สามารถอ่านค่าอุณภูมิได้ที่ความแม่นยำ +-0.2C ช่วงในการวัดอยู่ที่ 10C-40C สามารถทำงานได้จากแหล่งพลังงานในตัวเป็นถ่าน 18650 หรือเสียบสาย USB ก็ได้เช่นกัน หน้าตาเป็นแบบนี้ครับ การใช้งานจริง ๆ ตามคู่มือคือใช้วัดที่หน้าผากหรือช่องหูนะครับไม่ใช่ฝ่ามือ โดยเมื่อเข้าไปในระยะของเซ็นเซอร์วัดระยะก็จะสั่งให้ทำการวัดค่าอุณหภูมิแบบไร้การสัมผัส Previous Next ซึ่งด้วยความที่เราเห็นว่าเจ้าเครื่องนี้มีโปรแกรมบนคอมพิวเตอร์ให้สามารถใช้งานได้ด้วยอยู่แล้ว และก็มีช่องทางในการเชื่อมต่อกับคอมพิวเตอร์ได้ผ่านทาง USB เท่านั้นเราก็มาทดลองเสียบสาย USB เข้ากับเครื่องคอมพิวเตอร์ของเราก่อนเลยดีกว่าครับ โดยเมื่อเราต่อเรียบร้อยก็จะตรวจพบว่าเจออุปกรณ์เป็น Serial port ขึ้นมา Chip ที่ใช้ก็เป็น CH340 รุ่นยอดนิยมนั่นเอง ไม่รอช้าเราก็เปิดโปรแกรม Real Term ขึ้นมาเพื่อทดลองอ่านค่ากันดูดีกว่าครับ การทดลองของเราง่าย ๆ คือเริ่มจากทดลองเปลี่ยน baud rate ไปเรื่อย ๆ จาก 9600 ไปจนมันอ่านค่าที่ส่งออกมาได้ ทดลองอยู่ไม่นานไล่จาก 9600 ไปจนถึง 115200 เราก็ประสบความสำเร็จครับ อ่านค่าออกมาได้ดังนี้ การแปลงค่าที่อ่านได้จาก Serial จากค่าด้านบนคือข้อมูลเมื่อเราทดลองให้เครื่องวัดตรวจวัดอุณหภูมิได้ 1 ครั้ง ก็จะได้ค่าออกมา 1 แถวจำนวน 7 ฺByte ตามภาพ ตามหลักการข้อมูล Byte สุดท้ายน่าจะเป็น Checksum เราก็ทดลองบวกค่าตั้งแต่ Byte แรกจนถึง Byte ที่ 6 แล้วทดลองคำนวนแบบ CheckSum8 Modulo 256 ก็ได้ค่าออกมาตรงกับข้อมูลใน Byte สุดท้ายโอเคเป็น Checksum ถูกต้อง งั้นมาลองดู Byte ถัดมาคือค่า 0x6C 0x01,0x6D 0x01 ดีกว่าเพราะจากการสังเกตค่าที่แตกต่างของสองบรรทัดนี้ก็แปรผันกับค่าอุณหภูมิที่แสดงออกทางหน้าจอ LED 7-segment ของเครื่องวัดด้วย   0x6C ก็คือค่า 108 ในฐาน 10 0x01 ก็คือ 1 ในฐาน 10 ค่าที่อ่านได้จากเครื่องวัดคือ 36.4 C งั้นเรามาลองดูกันว่าจะทำยังไงให้ 0x6C รวมกับ 0x01 ได้ค่าออกมาดูใกล้เคียงกับ 36.4 ได้บ้าง เราก็ทดลองดูเรื่อง Byte order กันต่อ ว่าข้อมูลที่ส่งมาเป็น Big endian รึเปล่าหรือเป็น Little endian กันแน่ ลองแปลงค่ากันครับระหว่าง 0x6C1 , 0x16C อะไรมันจะให้ค่าที่ตรงกับที่เราหากันแน่ 0x6C1 คือค่า 1,729 ในฐาน 10 ส่วน 0x16C คือ 364 ในฐาน 10 เอ๊ะ 364 กับ 36.4 เริ่มเข้าเค้าแล้วใช่มั้ยครับจับ / 10 หรือ x 0.1 ก็ได้ 36.4 แล้ว จบไป 1 ข้อครับ ใครอ่านถึงตอนนี้แล้วจะไปเขียนโปรแกรมบนคอมพิวเตอร์ไม่ทำแล้ว MCU ก็ตามสบายครับ งัดแงะเครื่องกันดีกว่า หลังจากเราอ่านค่าได้ถูกต้องแล้วเราก็มาลองดูความเป็นไปได้ว่าจะสามารถต่อเอาค่าจากเครื่องวัดมาต่อกับ ESP32 ได้รึเปล่ากันต่อครับ เพราะว่า ESP32 ยังไม่รอบรับการใช้งานเป็น USB host เราต้องการต่อ UART ระหว่างบอร์ดของเครื่องวัดกับบอร์ด ESP32 ของเราตรงๆ งั้นแงะกันเลยนะครับ เราก็จะพบว่า USB2Serial ของเราเป็นเบอร์ CH340N เราก็ไปหา Datasheet มากันต่อได้เลยว่าจะต่อสัญญาณออกไปยังไง จาก Pinout เราจะเห็นว่า IC CH430N นั้นแต่ละขามีหน้าที่อะไรบ้าง เพื่อที่ว่าเราจะได้ไปดึงสัญญาณ TX จาก MCU ที่จะส่งไปให้ CH340N แปลงเป็น USB มาใช้ได้ตรงๆ โอเคเราเจอแล้วว่าต้องต่อที่ขา 7 หรือ RXD ตามรูปนั่นเองครับ ปัญหาต่อมาคือเราไม่รู้ว่าระดับของแรงดันที่ส่งมาจาก  MCU คือกี่ Volt งั้นเราไปดูกันต่อว่า MCU เป็นเบอร์อะไร ก็เจอว่าตัว MCU ที่ใช้ในบอร์ดวัดค่าอุณหภูมิคือ STM32F031K6T6 จาก STMicroelectronics นั่นเองครับ ซึ่งเมื่อไปเปิด Datasheet ดูก็จะพบว่าทำงานที่แรงดัน 2-3.6 V ซึ่งก็เป็นช่วงเดียวกันกับ ESP32 เช่นเดียวกันดังนั้นเราก็สามารถที่จะต่อได้เลยไม่ต้องผ่านวงจร level shiter แต่ประการใด หลังจากนั้นเรา ก็จะมาต่อเข้ากับ ESP32 กันครับ โดยบน ESP32 เนี่ยมี UART 3 ชุดให้ใช้ได้คือ […]

การดัดแปลงเครื่องวัดอุณหภูมิหน้าร้านสะดวกซื้อให้เป็น AIIoT ตอนที่ #1 Read More »

วิธีตั้งค่าเพื่อใช้ ESP32 บน ESP RainMaker

หลักจาก Espressif เปิดตัวแพล็ตฟอร์ม ESP RainMaker มาให้เราสามารถที่จะสร้างระบบ IoT แบบง่าย ๆ ไปในช่วงสองสัปดาห์ที่ผ่านมานั้น ก็มีเสียงบ่นกันจากบรรดาชาวเมกเกอร์ว่าทำไมมันรองรับแต่ ESP32-S2 ล่ะ ทำไมใช้งาน ESP32 ตัวเก่าไม่ได้  ซึ่งสาเหตุหลักๆเลยคือขั้นตอนของการ claiming ที่จะต้องใช้ RSA2048 และ HMAC512 ซึ่งมีอยู่บน ESP32-S2 เท่านั้น ก็เลยต้องอดใช้งานบน  ESP32 กันไป แต่ในช่วงเที่ยงคืนที่ผ่านมาก็มีอีเมล์จากทาง Espressif ส่งเข้ามาเพื่อแจ้งว่า ตอนนี้เราจะสามารถทดลองใช้งาน ESP32 บน ESP RainMaker กันได้แล้วโดยมีขั้นตอนเพิ่มเติมขึ้นมานิดเดียวเท่านั้นครับ ผมเลยถือโอกาสเรียบเรียงวิธีทำมาให้เพื่อนได้ทดลองกัน ซึ่งถ้าใครยังไมได้รู้จักและติดตั้ง ESP-RainMaker ก็ไปลองอ่านบทความได้   [ ที่นี่ ] ขั้นตอนการทำทั้งหมด สิ่งที่ Espressif ทำเพื่อให้เราใช้งาน ESP32 บน ESP RainMaker ได้ ก็คือการย้ายกระบวนการ Claiming ซึ่งติดข้อจำกัดของฮาร์ดแวร์มาทำบนเครื่องพีซีของเราผ่านทาง CLI ของ ESP RainMaker Agent SDK ดังนี้ 1) เปิดหน้าต่าง Terminal ขึ้นมาเพื่อเข้าไปยัง esp-rainmaker/cli 2) ทำการ login เข้าไปยัง cloud ของ ESP RainMaker ด้วยคำสั่ง ./rainmaker.py login แล้วจะมีการเปิดหน้าเว็บเบราเซอร์ให้ทำการล็อคอิน แสดงการเลือก account ในการล็อคอิน 3) หลังจากล็อคอินเรียบร้อยนั้น ขั้นตอนต่อไปคือการ Claiming ด้วยคำสั่ง ./rainmaker.py claim <PORT>  ซึ่งในขั้นตอนนี้เราต้องต่อบอร์ดให้เรียบร้อยเนื่องจากจะมีการแฟลชไฟล์ที่เป็น certificate ที่ได้จากการ Claiming ลงไปเก็บไว้ยังบอร์ด ESP32 ของเรา  ข้อควรระวัง ตอ้งใช้ Python3.7 ขึ้นไปใครใช้ Python3.5 อยู้ต้องอัพเกรดก่อน 4) ทำการตั้งค่า target ของ idf ใหม่จาก default เป็น ESP32-S2 ให้เป็น ESP32 โดยต้องเข้าไปยังตำแหน่งของโปรเจคที่เราจะทำการ flash ก่อน เช่นไปยัง esp-rainmaker/examples/switch แล้วพิมพ์ idf.py set-target esp32 5) จากนั้นก็สามารถสั่ง build และ flash ได้เหมือนเดิม โดยสังเกตุว่าตอนที่ build นั้นค่าของ chip target จะเปลี่ยนไปเป็น ESP32 เรียบร้อย 6) หลังจากนั้นเมื่อเราสั่ง idf.py monitor เพื่อเริ่มกระบวนการ WiFi provisioning ได้เหมือนกับ ESP32-S2 ทุกประการ การใช้งานในส่วนของ WiFi Provisioning เหมือนกับ ESP32-S2 ทุกประการ สรุป จากการทดลองใช้งานก็พบว่าน่าจะเป็นการขยายกลุ่มผู้ใช้หน้าเก่า ๆ ที่ยังไม่มีบอร์ดที่ใช้ ESP32-S2 ให้ได้เข้ามาทดลองใช้งานแพล็ตฟอร์ม ESP RainMaker กันได้เพื่อจะได้มีฟีดแบ็คไปใช้ในการปรับปรุงระบบให้ดีกว่านี้  โดยข้อจำกัดที่มีอยู่ตอนนี้คือ 1 account จะผูกกับบอร์ดได้เพียง 5 บอร์ดเท่านั้น อันนี้ไม่แน่ใจว่าถ้าเป็น ESP32-S2 จะติดข้อจำกัดนี้เหมือนกันรึเปล่านะครับ แต่อย่างไรก็ดีก็อยากให้มาทดลองใช้งาน ESP RainMaker กันครับ อย่างน้อยก็ได้เห็นวิธีการทั้งหมดในการสร้าง UX แบบรายรื่นให้กับผู้ใช้เพื่อเป็นแนวทางให้กับการพัฒนาระบบของเราขึ้นมาเองว่าควรจะไม่ด้อยไปกว่านี้ สวัสดีครับ

วิธีตั้งค่าเพื่อใช้ ESP32 บน ESP RainMaker Read More »

ทดลองสร้างระบบ Smart Restaurant ด้วยอุปกรณ์จาก TTGO #ตอนที่ 1 แนวคิดและการออกแบบระบบ

สวัสดีครับผู้อ่านที่รักทุกท่าน วันนี้ทาง Maker[LAB] ของเราจะนำเสนอแนวคิดในการสร้างระบบ Smart Restaurant ด้วยอุปกรณ์ที่หาได้จากเว็บไซต์ https://www.aiiotshop.com/ กันดูครับ แล้วคำว่า Smart Restaurant นี่มันเป็นยังไงเดี๋ยวเรามาดูแนวคิดกันดูก่อนเลยดีกว่าครับ แนวคิดในการพัฒนา ภาพรวมแนวคิดของระบบ จากภาพรวมการทำงานของระบบที่เราได้วางไว้จะอธิบายลำดับการทำงานของระบบได้ดังนี้ 1) ผู้ใช้ หากโต๊ะไม่ว่างสามารถใช้ LINE LIFF ในการทำการจองโต๊ะได้โดยระบุรายละเอียดความต้องการในการจอง เมื่อมีโต๊ะที่ตรงกับเงื่อนไขที่ทำการจองไว้จะมีการแจ้งเตือนพร้อมระบุรูปแบบของแสงไฟที่ผูกกับหมายเลขโต๊ะเพื่อให้ง่ายต่อการหาโต๊ะที่จองไว้ เมื่อเข้านั่งยังโต๊ะแล้วผู้ใช้สามารถทำการ Scan QR code ที่จะเปลี่ยนโค้ดทุกครั้งที่โต๊ะว่าง และหลังจาก scan แล้วจะพาเข้าไปยังหน้าสั่งอาหาร ลูกค้าสามารถสั่งอาหารได้ผ่าน LINE LIFF หรือระหว่างนั้นหากต้องการเรียกบริกรเพื่อสั่งอาหารแบบปกติก็สามารถกดปุ่มเรียกได้ และเมื่อต้องการชำระค่าอาหารสามารถจ่ายได้ด้วยการ scan QR code ที่จะเปลี่ยนอัตโนมัติตามค่าอาหารที่ต้องชำระจริง เมื่อการชำระเงินเสร็จสิ้นไฟสถานะของโต๊ะอาหารจะเปลี่ยนไปเป็นสีที่แจ้งให้พนักงานเห็นว่าการชำระเงินทำได้เสร็จสิ้นแล้ว  2) ห้องครัว จะเห็นรายการการสั่งอาหารของแต่ละโต๊ะ เพื่อให้สามารถทำได้อย่างถูกต้อง และเมื่อเสร็จแล้วสามารถกดปุ่มแจ้งพนักงานบริกรได้ 3) พนักงานบริกร สามารถเห็นการกดเรียกและเหตุผลในการเรียกได้ผ่านทางป้ายแสดงการกดเรียก 4) พนักงานคิดเงินสามารถเห็นสถานะของโต๊ะทั้งหมดในร้านได้และสามารถกดเปลี่ยนสถานะของโต๊ะอาหารได้ ซึ่งเราจะต้องพัฒนาฮาร์ดแวร์ออกมาจำนวนทั้งสิ้น 3 ประเภทด้วยกันคือ 1) ไฟแสดงสถานะของโต๊ะ ซึ่งจะใช้บอร์ด ESP32 รุ่น TTGO Mini32 T7 ในการพัฒนา สามารถดูรายละเอียดของบอร์ดได้ [ที่นี่] ร่วมกับหลอด LED WS2812 โดยข้อดีของบอร์ดรุ่นนี้คือเล็กและราคาประหยัด สามารถต่อเสาอากาศภายนอกเพิ่มได้ TTGO Mini32 T7 2) กล่องสำหรับใช้สร้าง QR code และกดปุ่มเรียกพนักงาน ซึ่งจะใช้บอร์ด ESP32 รุ่น TTGO T5 E-paper 2.7″ ซึ่งมีหน้าจอ E-paper ขนาด 2.7 นิ้วติดตั้งมาให้ใช้งานได้ พร้อมลำโพง เราจึงจะสามารถสร้าง Qr code  แบบคมชัดและสแกนได้ง่ายด้วยบอรืดทดลองนี้ สามารถดูรายละเอียดของบอร์ดได้ [ที่นี่] TTGO T5 E-paper 2.7″ 3) ป้ายแสดงการกดเรียกพนักงาน ซึ่งจะใช้บอร์ด ESP32 รุ่น TTGO T8 ซึ่งมี PSRAM เพิ่มขึ้นมาอีก 4M เพื่อให้สามารถใช้งานร่วมกับจอ LED Dot Matrix ขนาดใหญ่ได้ สามารถดูรายละเอียดของบอร์ดได้ [ที่นี่] TTGO T8 เป็นยังไงกันบ้างครับน่าสนุกกันแล้วใช่มั้ยครับกับ IoT โปรเจคต์นี้ สำหรับใครที่อยากทดลองทำไปพร้อมๆกัน ก็สามารถเตรียมอุปกรณ์รอกันก่อนได้เลยนะครับ ในบทหน้าเราจะเริ่มทำให้ส่วนของการฮาร์ดแวร์เพื่อแสดงสถานะของโต๊ะอาหารแต่ละตัวกันครับ ระหว่างที่รอบทความก็สามารถสั่งซื่ออุปกรณ์มาเตรียมรอกันก่อนได้เลยครับ

ทดลองสร้างระบบ Smart Restaurant ด้วยอุปกรณ์จาก TTGO #ตอนที่ 1 แนวคิดและการออกแบบระบบ Read More »

ทำ Data Logger ด้วย TTGo T1 (ESP32) และโมดูล DS3231

ในปัจจุบันเราต้องการ ESP32 Application ประเภท Data Logger อยู่บ่อยครั้ง ซึ่งชิพ ESP32 สามารถตอบโจทย์ทางด้านนี้ได้เป็นอย่างดี ไม่ว่าจะเป็นการทำแบบ  Online หรือ Offline ถือว่าเป็นชิพที่ครบเครื่องจริงๆครับ ในบทความนี้ผู้เขียนเลือกใช้วิธีการเก็บข้อมูลแบบ Offline เนื่องจากต้องการลดปัญหาทางด้านเครือข่าย และไม่ต้องการให้จบด้วย Module ESP32 ในตัวเดียว TTGo T1 (V1.3) ผู้เขียนเลือกใช้บอร์ด TTo T1 ซึ่งเป็น Breakout Board จาก Lilygo เนื่องจากราคาถูก และรองรับการเสียบ SDCard และแบตเตอรี่ในตัว TTGo T1 Pin Mapping RTC Module (DS3231) RTC Module หรือ โมดูลนาฬิกา เป็นสิ่งที่ขาดไม่ได้ เนื่องจากโจทย์ในรอบนี้เราไม่มีการเชื่อมต่อผ่าน Internet ดังนั้น ถ้าเราต้องการเก็บข้อมูลจากเซ็นเซอร์แล้ว เราต้องมีเวลากำกับ ไม่เช่นนั้นเราจะไม่รู้ว่าข้อมูลของช่วงเวลาไหน ซึ่งจริงๆแล้วสามารถใช้ RTC เบอร์ไหนก็ได้ครับ แต่วันนี้ผู้เขียนจะเลือก DS3231 มาใช้เนื่องจากตัวนี้สามารถบอกอุณภูมิได้ด้วยนั่นเอง!! เริ่มกันเลย! Wiring ค้นหา I2C Address หลังจากแสกนแล้วจะเจอ 2 Address ตามภาพ ติดตั้ง Library RTC By Makuna LilyGO / esp32-micro-sdcard เปิดตัวอย่าง DS3231_Simple และรัน จะได้ผลได้ภาพครับ ถ้าได้แบบนี้แล้ว แสดงว่าปกติ! ได้ค่าอุณหภูมิ และเวลามาแล้ว!!! ทดสอบ อ่าน/เขียน SDCard รันแล้วจะได้ตัวอย่างดังในภาพ แสดงว่าเราเขียน SDCard ได้แล้ว! เริ่มเขียนโค๊ดกันเลย! RTCSetup RTCSetup เป็นฟังก์ชั่นสำหรับเซ็ตเวลา โดยจะให้เป็นเวลาตอนคอมไพล์โปรแกรม loop อ่าน Sensor และ Date/Time ทุกๆ 500ms โดยเราจะเก็บไว้ในตัวแปร Global เพื่อเก็บไปใช้ในส่วนของ Save ไฟล์ลง SDCard อีกที temperatureC filenamestring datestring timestring บันทึกข้อมูล! โปรแกรมนี้เราจะสร้าง Task ขึ้นมาเพื่อบันทึกข้อมูลลงใน SDCard ครับ ซึ่งกำหนดได้ว่าจะให้บันทึกข้อมูลทุกๆ กี่วินาทีดี ซึ่งโปรแกรมตัวอย่างจะบันทึกค่าทุกๆ 5 วินาที และกระพริบไฟบอก 20ms เพื่อให้รู้ว่ามีการบันทึกข้อมูลแล้ว และเราจะ Delay การ Start Task เป็นเวลา 10วินาที เพื่อรอให้ main โปรแกรมทำงานไปก่อน เพียงเท่านี้เราก็จะได้โปรแกรมที่ทำหน้าที่เก็บข้อมูล Sensor ไว้ใน SDCard ในรูปแบบของไฟล์ CSV แล้ว!!! ซึ่งโค๊ดทั้งหมดจะมีหน้าตาแบบนี้! (สามารถกดโหลดได้โดยการคลิ๊กที่ภาพได้เลย!) ข้อมูลในไฟล์ .csv เปิดดูไฟล์กันหน่อย! จะเห็นว่ามีข้อมูลมาเรียบร้อย… เราลองมา Plot Graph ดูหน่อยดีกว่า! ซึ่งรอบนี้ผมใช้โปรแกรม Numbers (เหมือน Excel) เปิดขึ้นมาทำกราฟ อุณภูมิที่เราเก็บไว้ครับ แจ่มแจ๋วไปเลย! เห็นมั้ยครับ เพียงเท่านี้เราก็มี Data Logger ไว้ใช้งานแล้ว… รอบหน้าเรามาดูกันว่าเราจะเอาไฟล์ .csv ของเราไปทำอะไรกันต่อได้บ้าง! Happy Logging! เลือกซื้อสินค้าได้ที่ร้านของเราที่ https://www.aiiotshop.com

ทำ Data Logger ด้วย TTGo T1 (ESP32) และโมดูล DS3231 Read More »