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

เรียนรู้และฝึกทดลองไปกับบอร์ดไมโครคอนโทรเลอร์ 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