วันอังคารที่ 29 สิงหาคม พ.ศ. 2560

มาทำให้บอร์ด Arduino ทั้งหลาย สามารถใช้ฟังกชั่น printf() ได้ดีกว่า

หลายอาทิตย์ก่อน มีคนมาตั้งคำถามในกลุ่ม
อยากจะแสดงเวลาบน LCD แบบมีเลข 0 นำด้วยถ้าเลขต่ำว่า 10
ซึ่งตามปกติการแสดงบน lcd จะเขียนด้้วย print() อย่างนี้

//--------------------------------------------------
   int hour = 12; 

   int minute = 5; 
   int sec = 9;

   if( hour <10 ) lcd.print("0");
   lcd.print(hour);
   lcd.print(":");
   if( minute <10 ) lcd.print("0");
   lcd.print(minute);
   lcd.print(":");
   if( sec <10 ) lcd.print("0");
  lcd.print(sec);
//--------------------------------------------------

แต่บน ESP8266 เราสามารถเขียนโดยใช้
ฟังกชั่น print ที่กำหนด format ได้
หรือ ที่เรียกว่า ฟังกชั่น printf()
ซึ่งจะเหลือบรรทัดเดียวดังนี้

//--------------------------------------------------
lcd.printf("%02d:%02d:%02d", hour, minute, sec);
//-------------------------------------------------


ปรากฏว่า บน Arduino กลับไม่รองรับ
การใช้ printf() ซะงั้น !?!!!!
วันนี้พอมีเวลาเลยมาทำให้ฝั่งบน Arduino
สามารถ ใช้ ฟังกชั่น printf() ได้ด้วยเลยดีกว่า
ซึ่งจะทำให้ โคดมีความเรียบร้อยขึ้นมาก


-------------------------------------------------------------
วิธีทำ
=====
1) ให้ไป download 2 files
คือ ไฟล์ Print.h และ Print.cpp นี้มา
ผู้เขียนอัพโหลดไว้ที่
https://github.com/TridentTD/Arduino_Printf


2) จากนั้นให้เข้าไปที่ โฟลเดอร์
C:\Users\..ชื่อuser..\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18\cores\arduino
แล้วเอาไปแทนที่ในโฟลเดอร์นั้น
เพียงเท่านี้ Arduino ของคุณ
ก็จะสามารถใช้ printf()
ได้ทั้ง บน lcd หรือแม้กระทั่ง บน Serial monitor ได้
ทำให้โคดมีความเรียบง่ายและสั้นขึ้น ในลัดนิ้วมือเดียว



-------------------------------------------------------------

วันอาทิตย์ที่ 13 สิงหาคม พ.ศ. 2560

เทคนิคเล็กๆ กับการ แสดงสถานะการเชื่อมต่อ WiFi ด้วย LED ใน ESP8266

ปกติการเชื่อมต่อสัญญาณไวไฟ ของ ESP8266
มักจะใช้ Serial Monitor เป็น จุดแสดงว่า ESP8266 ได้เชื่อมต่อ WiFi สำเร็จแล้วหรือยัง
แต่ End-User ที่ไม่ได้มีการใช้ Serial Monitor จะไม่สามารถรู้ว่าขณะนี้ การเชื่อมต่อไวไฟ เป็นอย่างไร

มีวิธีทำให้ End-User ก็สามารถทราบว่าไวไฟได้เชื่อมต่อแล้วหรือยังด้วย
เทคนิคง่ายๆ ดังนี้


ให้เพิ่ม

extern "C" {
#include "user_interface.h"
}

เข้าไปส่วนต้นของ code
จากนั้นก่อนที่ จะสั่งให้ WiFi เริ่มต้นทำงาน ด้วย WiFi.begin(ssid, password);
ก็ให้เพิ่มบรรทัดนี้เข้าไป

wifi_status_led_install(2,  PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);

ส่วนอื่นๆ การเชื่อมต่อไวไฟ ให้เขียนตาม code ปกติ
เพียงเท่านี้ หาก ESP8266 ไวไฟ ยังไม่เชื่อมต่อ ไฟจะกระพริบที่ LED  GPIO2
แต่หากไวไฟ เชื่อมต่อสำเร็จ ไฟจะสว่างหยุดการกระพริบ
ก็จะช่วยให้ End-User ก็สามารถทราบว่าไวไฟได้เชื่อมต่อสำเร็จแล้วได้
หมายเหตุ
สำหรับ ESP-01 ให้เปลี่ยนเป็นค่าดังนี้แทน

wifi_status_led_install(0, PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);






วันอาทิตย์ที่ 6 สิงหาคม พ.ศ. 2560