เมื่อผมเป็น Maker มือใหม่
ความมันส์ก็บังเกิด….
เมื่อ FullStack Dev ง่อยๆ ริเป็น Maker กับเขาความบันเทิงเชิงบรรลัยก็เกิดขึ้น ไม่ได้หลับได้นอนมาหลายวัน ก็บันทึกไว้สักหน่อย เผื่อมือใหม่ที่กำลังสนใจได้ข้ามผ่านอุปสรรค์ที่ผม ได้เจอมาและไปได้อย่างรวดเร็ว ผมได้ยินเรื่องราวพวกนี้มานานเพราะรอบๆ ตัวก็มีคนเล่นเกี่ยวกับอุปกรณ์พวกนี้เยอะ แต่ไม่มีโอกาสได้ลอง เพราะ พื้นฐานไม่มีเลย เมื่ออาทิตย์ก่อนน้องที่แลปก็ชวนเดินไปที่ Gravitech ซึ่งเป็นบริษัทขายอุปกรณ์ Iot ที่ตั้งอยู่ภายในที่ทำงาน ก็เดินตามกันไปสามคนแบบ ไม่มีจุดหมายอะไรเลย พอไปถึงทั้งสามคนก็จัดกันมาคนละชุด โดยไม่รู้เลยว่าแต่ละตัวนั้นมีคุณสมบัติอะไรบ้าง รู้แต่ราคาไม่เบา T_T
อุปกรณ์ที่ผมเริ่มต้นครั้งแรกในชีวิตมีดังนี้
- MacBookPro 2018 USB-C + USB-C to USB 3
- Node32 Lite
- Sensirion SPS30
- Breadboard
ได้มาก็เปิดหาว่าจะทำให้มันทำงานได้อย่างไร ก็ทำตามคู่มือจาก http://www.ayarafun.com/ ทำให้รู้จัก Arduino IDE เป็นครั้งแรก เปิดมาก็งงๆ จะเขียนอะไรลงไป เอา Code ตัวอย่างมาลองรันดู ยังดีที่มันรันได้เลยซะส่วนใหญ่ เลยทำให้มีความหวังมากขึ้น แบบฝึกหัดในครั้งนี้ก็คือ ทำตัววัดฝุ่นที่เค้ากำลังฮิตกันนี่แหละ หวังไว้ว่าทำเสร็จแล้วก็ทำ Platform มารับข้อมูลแลกเปลี่ยนกันระหว่างสามคน
ต่อแบบไหน อะไรยังไง ?
เมื่อเปิด Datasheet ของ SPS30 ดูพบว่ามันมีวิธีการต่อได้สองแบบ คือ
- UART
- I2C
แล้วยังไงละ จิ้มตรงไหน ? ตอนแรกก็จิ้มตามที่แนะนำในคู่มือ คือ เสียบ POWER GND Rx Tx เข้าไปที่ ESP32 ปัญหาคือ Tx Rx มีสองอัน เสียบอันไหนก็ได้ ? ก็เสียบไปที่ Tx0 Rx0 git clone driver มาจาก Sesirion run example เฮ้ยย มัน นิ่งไม่ไปไหนเลย ลองเปลี่ยนไป Tx1 Rx1 อันนี้ upload ขึ้นได้ แต่ probe ไม่ได้ ทำยังไงก็ไม่ได้ น้องที่ซื้อมาด้วยกันก็บอกให้ลองต่อแบบ I2C ก็เปิดคู่มือต่อกันเลย git clone driver มาใหม่เอา code ตัวอย่างมารันก็ probe ไม่ได้อีก เริ่มเหงื่อตก เลยถาม Maker รุ่นพี่โคนัน ก็ได้ Code มาชุดหนึ่งมา บอกให้ทำตามนั้นเลย ทำตามอย่างเดียวเลยตอนนั้น เฮ้ยยย มันรันได้อ่านค่าได้แล้ววุ้ยยย ดีใจๆๆๆๆ
ตอนนั้นต่อ I2C แบบตรงๆ ไม่มี R ตามคู่มือ แต่มันก็ทำงานได้นะเลยเอาไว้ก่อน เดินไปหา R มาลองจากชั้น 4 ก็เสียบๆ ต่อๆ สายยุ่งไปหมด ต่อแล้วมันทำงานได้ด้วย เมื่อเริ่มคุ้นเคยก็เริ่มไล่สายใหม่ถอดออกไปทีละสายๆ จนเหลืออยู่ไม่กี่เส้น ฮาๆ แล้วตอนแรกต่อทำไมให้งง ?
เมื่อได้ข้อมูลตาม code ตัวอย่างก็เริ่มปรับให้ดึงค่าทั้งหมดมาแสดง ตอนนี้เริ่มสังเกตความผิดปกติของค่า ที่มันเท่าๆ กัน เกือบทุกครั้ง ไปดูตัวอย่างภาพหน้าจอของคนที่เขียนไว้ก็ค่าเท่าๆ กัน เลยอยากลองต่อ UART ให้ได้ พอดีมีน้อง Sonthaya Boonchan https://jackrobotics.me/esp32-lite-sensirion-sps30-uart-ทำตัววัดฝุ่น-diy-แบบ-maker-กันเถอะ-cbeaba5fbcf5 เขียนวิธีไว้เลยทำตามก็ใช้ได้ และทำให้รู้ว่ามี Tx2 Rx2 อีก คือ ขา 16 17 มือใหม่อย่างผมนี่ไม่รู้เลย เมื่อต่อ UART ได้แล้วก็พบว่าค่าที่ได้ไม่ต่างกันคือ ค่าฝุ่นมีค่าเท่าๆ กันเกือบทุกครั้งยกเว้นจุดไม้ขีดไฟ หรือ เป่าแป้ง ค่าจะต่างกันบ้างแต่พอลดลงมาก็จะเท่าๆ กันอีก
ต้มยำทำแกง
เมื่อเริ่มถูไถไปได้ก็เริ่มดูเรื่องความสามารถมันทำอะไรได้บ้างก็ผสมโน่นนี่นั่นไปเรื่อย ถ้ามีโอกาสก็พยายามอ่านความรู้พื้นฐานของเจ้า esp32 ก็ทำให้พอเห็นภาพได้บ้าง ตอนนี้ก็ลอง เก็บข้อมูลมาหลายวันยิงเข้าสองสามที่แชร์ข้อมูลกัน
บทความนี้คงไม่เขียนขั้นตอนพื้นฐานตั้งแต่ต้นเพราะมีคนเขียนไว้พอสมควรเดี๋ยวจะแปะลิ้งก์ไว้ให้ ตอนแรกก็เล็งๆ หน้าจอแสดงผลไว้ เพราะบางทีเราไม่สะดวกที่จะดูข้อมูลบน Server ตลอด แต่เมื่อศึกษามันมีจุดน่าสนใจคือสามารถ run เป็น web server ได้ จริงๆ มันมี bluetooth ด้วยแต่ผมไม่เก่งเรื่อง programming แบบลึกๆ แต่ถ้า web server อะไรพวกนี้พอถูไถไปได้ ก็เลยมีโจทย์ให้กับตัวเองว่า ทำตัวแสดงผลค่าจาก sensor ผ่านหน้าเว็บเอาแล้วกัน เมื่อลองศึกษาก็พบว่าไม่ยากมากพอทำได้ แต่ก็จะมีปัญหาเรื่องความร้อนของ CPU ที่พุ่งอยู่ที่ 4x ตลอดเวลาแต่ก็ยังพอยอมรับได้ :P เดี๋ยวจะทะยอยเขียนให้อีกสองตอน คือ การทำ Dashboard พื้นฐานบน Node32 Lite เพียวๆ และ อีกตอนจะนำไปประยุกต์ใช้เมื่อเสียบ Sensor สามารถนำไปใช้ได้หลากหลายถ้ามีความเข้าใจ
ปัญหาที่เจอ
- ไฟไม่เสถียร วันแรกเลยผมพบว่ามันมีปัญหาเกี่ยวกับการต่อ wifi มาก ติดๆ ดับๆ เริ่มก็ช้า ก็คิดว่าผิดที่เราเขียนไม่เป็น แต่ก็แค่ run ตัวอย่างเองไม่น่าจะมีปัญหาอะไร ก็งมอยู่นาน จนสรุปได้ว่าเจ้า USB-C to USB-3 ที่ใช้อยู่มันไม่ดี เพราะจะเจอตอนเสียบอุปกรณ์อื่นๆ มักจะเห็นบ้างไม่เห็นบ้าง เลยไปหาอันใหม่มาลอง มันก็เริ่มต่อง่ายขึ้นมีช้าอยู่บ้าง ตอนแรกก็นึกว่าปกติ
- เมื่อได้ USB-C to USB-3 ตัวใหม่มามีครั้งหนึ่งเผลอเอามือไปจับตอนทดสอบต่อ wifi พอดีแล้วมันทำให้ต่อติดทันทีด้วย เลยทดสอบซ้ำหลายๆ รอบ และ สรุปต่อมาว่าขั้วสายมันไม่แน่น ก็ไปรื้อกรุสมบัติเอาสายมาลอง เฮ้ยยยย ครั้งนี้ไม่มีการรอเลย ต่อติดทันทีหลัง upload เสร็จไม่เคยเจอมาก่อน สรุปว่าสายคุณภาพไม่ดีด้วย
- ปัญหาต่อมาความผิดปกติของค่าการวัดจาก SPS30 ถ้าสังเกตจะพบว่าค่า 2.5 4.0 และ 10.0 จะมีค่าเท่ากันเกือบทุกครั้ง มีน้อยครั้งมากที่ต่างกัน เป็นพฤติกรรมที่พบได้จากทุกคนที่ไปซื้อมาด้วยกัน สาม สี่ตัว
เมื่อทดสอบกับแป้งฝุ่นพบว่าค่าต่างๆ มีความต่างกันให้เห็นแต่ก็อยู่ไม่นานก็กลับมาเท่ากันอีก ในกลุ่มที่เล่นด้วยกันก็ลงความเห็นว่าตอนนี้ ก็ศึกษากันไปก่อน รอจนกว่าจะมีการออกมาแนะนำวิธีแก้ไขค่าให้ถูกต้องจากคนจัดจำหน่ายและ Sensirion เองไม่งั้นอุปกรณ์ตัวนี้ก็เป็นแค่ทำเล่นแต่ราคาแพง…
Link ที่ผมไปศึกษา
- http://www.ayarafun.com/2018/12/how-to-setup-lamloei-32-lite-with-arduino/ -> วิธีใช้งานครั้งแรก
- https://www.gravitechthai.com/product_detail.php?d=3318 -> รายละเอียดของบอร์ด
- https://www.gravitechthai.com/product_detail.php?d=3358 -> รายละเอียดของ Sensor
- https://github.com/paulvha/sps30 -> คนนี้เขียนเอกสารแนะนำด้วย
- https://github.com/Sensirion -> Driver จากผู้ผลิต
- https://jackrobotics.me/esp32-lite-sensirion-sps30-uart-ทำตัววัดฝุ่น-diy-แบบ-maker-กันเถอะ-cbeaba5fbcf5 -> implement UART ผมดัดแปลงมาจาก Project นี้
ถ้ามีอะไรนึกออกอีกจะมาอัปเดทไว้เรื่อยๆ เอาใจช่วยให้เขียนตอนต่อไปแบบไม่ขี้เกียจด้วยเถิ้ดดด