เรียนรู้และฝึกทดลองไปกับบอร์ดไมโครคอนโทรเลอร์ STM32 Nucleo
จากค่าย STMicroelectronics
(ตอนที่ 6 ทดลองใช้งานพอร์ต I2C บนบอร์ด Nucleo)

ในบทความนี้เป็นการทดลองเชื่อมต่ออุปกรณ์ผ่านพอร์ต I2C โดย I2C ย่อมาจาก Inter-Integrated Circuit สร้างโดยบริษัท Philips Semiconductor หรือที่รู้จักในชื่อ NXP Semi conductors ในปัจจุบัน ใช้ขาสัญญาณ 2 เส้นคือ SDA (Serial Data Line) และ SCL (Serial Clock Line) พอร์ต I2C บนบอร์ด Nucleo F401RE มีอยู่ 3 พอร์ต ในตัวอย่างนี้ใช้พอร์ต I2C ที่ 1 ต่อเข้ากับเซ็นเซอร์วัดความเข้มแสง (Lux Sensor) ที่ขา D14 (PB_7) เป็นขา SDA และที่ขา D15 (PB_8) เป็นขา SCL โดยเขียนโปรแกรมให้บอร์ด Nucleo อ่านค่าจากเซนเซอร์ ส่งค่าผ่าน Serial ไปยัง PC
สร้าง Project โปรแกรมใหม่ชื่อ Test_TSL2561 จากนั้นติดตั้ง Library ของ mbed เพิ่ม เหมือนกับการทดลองที่ 2 ดังภาพ

ค้นหา Library ของ TSL2561 ในตัวอย่างนี้ใช้ Library ที่ชื่อว่า TSL2561_I2C

ในหน้าเว็บ Library ของ TSL2561 ให้กด Import this library จากนั้นเว็บจะไปที่หน้าCompiler ของ mbed จะแสดงหน้าต่าง import Library จากนั้นกำหนดที่ของของ Library ที่ต้องการติดตั้งในช่อง Target Path ในตัวอย่างนี้กำหนดเป็น Test_TSL2561 จากนั้นกด Import

หลังจากติดตั้ง Library เสร็จแล้ว ที่หน้าต่าง Program Workspace จะได้ดังภาพ

ต่อวงจรดังภาพ

เมื่อต่อวงจรจะได้ดังภาพ

เขียนโปรแกรมในไฟล์ main.cpp ดังนี้
#include "mbed.h" #include "TSL2561_I2C.h" TSL2561_I2C lux_sensor( I2C_SDA, I2C_SCL ); Serial pc(SERIAL_TX, SERIAL_RX); int main() { lux_sensor.enablePower(); while(1) { pc.printf("Lux: %4.2f\r\n", lux_sensor.getLux()); wait_ms(100); } }
จากโค้ดจะเห็นได้ว่า
#include "mbed.h" #include "TSL2561_I2C.h" TSL2561_I2C lux_sensor( I2C_SDA, I2C_SCL ); Serial pc(SERIAL_TX, SERIAL_RX);
ประกาศ object TSL2561_I2C ชื่อ lux_sensor ใช้งานที่พอร์ต I2C 1 และใช้งานพอร์ต Serial ผ่านการประกาศ object ชื่อ pc ใช้งานพอร์ต Serial 2
int main() { lux_sensor.enablePower(); while(1) { pc.printf("Lux: %4.2f\r\n", lux_sensor.getLux()); wait_ms(100); } }
ในฟังก์ชั่น main ส่งใช้เซนเซอร์เริ่มทำงานผ่านฟังก์ชั่น lux_sensor.enablePower(); จากนั้นวนส่งค่าจากเซนเซอร์ไปยัง PC จากฟังชั่น lux_sensor.getLux(); ทุกๆ 100 ms
หลังจากที่โหลดโปรแกมที่บอร์ด Nucleo แล้ว ทดลองโปรแกรมโดยเปิดโปรแกรม X-CTU แสดงข้อความที่ Nucleo ค่าอ่านจาก Lux Sensor ส่งกลับมาที่ PC
