วันเสาร์ที่ 31 สิงหาคม พ.ศ. 2567

ESP8266 Buildin LED problem with Software serial ports

ปกติการใช้งาน esp8266 จะมี buildin LED ต่ออยู่ที่ GPIO 2 หรือ จะใช้ Keyword LED_BUILTIN ก็ได้

ปัญหาที่เจอคือเมื่อมีการใช้งานร่วมกับ Software serial port 


การใช้งานแบบทั่วๆไป เช่น code ต่อไปนี้ใช้งานได้สบายๆ


int LEDpin = 2; //LED buildin for node mcu V3

//หรือ int LEDpin = LED_BUILTIN;

void setup() 

{

  pinMode(LEDpin, OUTPUT);

}

void loop() 

{

      delay(500);

      digitalWrite(LEDpin,HIGH);

      delay(500);

      digitalWrite(LEDpin,LOW);

}

==>>>>>>>>>>>>>>>>>>>>>ปัญหา >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

แต่ถ้าใช้งานร่วมกับ  Software serial port  เช่น Code ข้างล่างนี้ ใน Loop LED จะไม่ทำตามที่สั่งแล้ว

#include <SoftwareSerial.h>

int RXpin = D4;

int TXpin = D5;

SoftwareSerial mySerial(RXpin, TXpin); // RX, TX

int LEDpin = LED_BUILTIN;

void setup() {

      pinMode(LEDpin, OUTPUT);

     //ตอนนี้ยังใช้ได้

      delay(500);

      digitalWrite(LEDpin,HIGH);

      delay(500);

      digitalWrite(LEDpin,LOW);


  Serial.begin(9600); //default module speed may be 115200.

  mySerial.begin(9600); //default module speed may be 115200.

}


void loop() {

  if (mySerial.available())

  Serial.write(mySerial.read());

  if (Serial.available())

  mySerial.write(Serial.read());

      // ตอนนี้ใช้ไม่ได้แล้ว LED จะไม่ติดหรือตอบสนองอะไรเลย !!!!!!

      delay(100);

      digitalWrite(LEDpin,HIGH);

      delay(100);

      digitalWrite(LEDpin,LOW);

}


--------------- สรุป ตอนนี้จะไม่ใช้ Buildin LED เมื่อต้องการใช้ Sotware Serial ports.---------------












วันอังคารที่ 26 มีนาคม พ.ศ. 2567

การใช้ ToolTip ใน ChartJS

การเข้าถึงข้อมูลใน Tooltip :

การอ้างอิงถึง ในระดับต่างๆ เช่นระดับ dataset  ซึ่งจะเป็นชุดข้อมูล Array จะอ้างอิงถึงชุดข้อมูลด้วยตัวชี้

tooltipItem.datasetIndex  ส่วนการเข้าถึง Element ใน Array ตะต้องใช้ตัวชี้ tooltipItem.dataIndex


ตัวอย่าง :

 options: {

plugins: { tooltip: { callbacks: { label: function(tooltipItem, data) { // Access the tooltip item index var datasetIndex = tooltipItem.datasetIndex; // Access the index of the hovered element within the dataset var index = tooltipItem.dataIndex; // Access the dataset var dataset = data.datasets[datasetIndex]; // Access the data value at the specified index var dataValue = dataset.data[index]; // Do something with the data value return dataValue; } } } } }

วันพุธที่ 6 มีนาคม พ.ศ. 2567

การใช้ JSON.stringify แล้วมี Error "

 ตัวอย่างการใช้งานแบบปกติทั่วไป

                    code




                   output

ปัญหา

กรณีใช้ร่วมกับ EJS templates  มักมีปัญหา โดยเฉพาะการ Encode string. เช่น

ค่าของตัวแปร ที่กำหนดใน xx.js   แล้วส่งให้หน้า yy.ejs  ผ่านทาง  res.render (labels,data)




                                            code ใน yy.ejs



                                            ในหน้า client debug. จะขึ้น error นี้

                                                                                           
 code ในหน้า debug.


     ดูชัดๆ  แทนที่จะได้เครื่องหมาย "  แต่จะได้เป็น &#34; แทน
                        
                                            
     ส่วนค่าตัวแปร data ที่เป็น ตัวเลข ไม่ error แต่ error เฉพาะตัวแปร labels    


วิธีแก้ไข 

     ให้แก้ไข จาก <%=    %>    เป็น <%-   %>    แบบนี้







                               

แค่นี้ก็ใช้ได้แล้วครับ  :)






วันจันทร์ที่ 28 พฤศจิกายน พ.ศ. 2565

กระแสสูงสุดที่ขับได้ ของขา I/O บนบอร์ด MH-tiny ATtiny88 ( Maximum Current of ATtiny88 I/O pins )


I/O ports บนบอร์ด MH-Tiny ATtiny88 สามารถใช้งานได้ทั้งแบบ Sink หรือ Source ถึงแม้ใน Data Sheet จะระบุค่าสูงสุดไว้ที่แต่ละขาสามารถใช้กระแสได้ไม่เกิน 40 mA  แต่ในทางปฏิบัติ กรณีใช้ไฟเลี้ยง 5V ได้กำหนดค่ากระแสไว้ที่ 10 mA  เพื่อให้ค่าแรงดันในแต่ละขาเป็นไปตามค่า Test Condition ส่วนขาที่เป็น High Sink (PD3-PD0) จะกำหนดไว้ที่ 20 mA 



ถึงแม้แต่ละขา I/O จะสามารถใช้งานกระแสที่สูงกว่าที่กำหนดไว้ได้ แต่ถ้ามีการใช้งาน I/O หลายขาพร้อมกัน กระแสรวมสูงสุดในแต่ละกลุ่มพอร์ต จะต้องไม่เกิน 100 mA

ซึ่งได้มีการจัดกลุ่มพอร์ตไว้ดังนี้

กลุ่ม 1 :  Ports A2 – A3, B0 – B7, C6, D0 – D7 รวมกันแล้วต้องไม่เกิน 100 mA

กลุ่ม 2 :  Ports A0 – A1, C0 – C5, C7 รวมกันแล้วต้องไม่เกิน 100 mA.


👍👍👍👍👍




วันอาทิตย์ที่ 27 พฤศจิกายน พ.ศ. 2565

การ Upload program บอร์ด MH-Tiny ATTINY88 (How to Program MH-Tiny ATTINY88 micro development board)




บอร์ด MH-Tiny ATTINY88 เป็นบอร์ดที่มีขนาดเล็ก ราคาถูก มีขา I/O ให้ใช้ค่อนข้างมาก และยังมีจุดเด่นในการใช้พลังงานที่ค่อนข้างต่ำ ถึงแม้จะมี Feature และหน่วยความจำโปรแกรมให้ใช้งานไม่มากนัก แต่ก็น่าสนใจไม่น้อย สำหรับการเขียนและ Upload โปรแกรมโดยใช้ Arduino IDE นั้น ก็สามารถทำได้ไม่ยาก โดย ต้องดำเนินการ 3 ขั้นตอนหลักๆ ดังนี้

     1. ติดตั้ง Device Driver USB ให้ Windows 

     2. ติดตั้ง Board manager ให้กับ Arduino IDE

     3. การเลือกบอร์ดและการ Upload โปรแกรม


การติดตั้ง Driver USB ให้ Windows

1. เข้าไป Download driver ซึ่งเป็น Zip ไฟล์ ที่ Link นี้ 
https://github.com/MHEtLive/MHEtLiveArduino/releases/download/1.0.0/2.0a4.rar


2. ให้แตกไฟล์ออกมา สำหรับ windows 64 bits ให้ run ไฟล์ "DPinst64"






Note : เมื่อติดตั้งเสร็จ อาจจะมีบางรายการ Install Failed ดังรูป  ไม่ต้องสนใจ ให้กด Finish ตามปกติ


การติดตั้ง Board manager ให้กับ Arduino IDE

1. ใน Arduino IDE ให้เข้าไปที่เมนู File-> Preferrences


 2. ในช่อง Additional Boards Manager URLs : ให้ใส่ Link นี้
https://raw.githubusercontent.com/MHEtLive/arduino-boards-index/master/package_mhetlive_index.json
แล้วกด OK


3. ให้เข้าเมนู Tools -> Bord Manager..


4. ในหน้าต่าง Board Manager ในช่อง ข้างๆ Type ให้กด MH เพื่อค้นหา 
จะขึ้นรายการ MH ET-LIVE Boards ให้กดปุ่ม Install


เมื่อติดตั้งเสร็จจะขึ้นด้านข้างว่า INSTALLED  แล้วกดปุ่ม Close เพื่อปิดหน้าต่าง



การเลือกบอร์ดและการ Upload โปรแกรม

1. ก่อนการเขียนโปรแกรม ให้เลือกบอร์ด โดยเข้าไปที่เมนู 
Tools -> Board -> MH-ETLIVE Board - > MH-ET LIVE Tiny 88 (16MHz)




Note : จะเห็นว่า ไม่มี Port ให้เลือก     (เพราะจะติดต่อผ่าน USB โดยตรง ไม่ได้ผ่าน COM ports)

2. เมื่อเขียนโปรแกรมเสร็จแล้ว จะ Upload ทำการโปรแกรม ให้ถอดสาย USB หรืออย่าเพิ่งต่อสาย USB ของบอร์ดเข้ากับ Port USB ของเครื่องคอมพิวเตอร์


3. กดปุ่ม Upload เมื่อ Compile เสร็จ หน้าจอจะแจ้งให้ต่อสาย ภายใน 60 วินาที  ก็ให้ต่อสาย USB ได้เลย




4. เมื่อ Upload เสร็จจะแสดงข้อความดังรูปนี้





ตัวอย่างเมื่อ  Upload โปรแกรมเสร็จแล้ว

:)

ข้อดี/ข้อเสีย ของ Board นี้

ข้อดี
ขนาดเล็ก ราคาถูก ขาเยอะ  A/D เยอะ PWM เยอะ ใช้พลังงานต่ำ การ Upload Program เร็ว

ข้อเสีย

1. ตอน Reset แล้ว จะต้องเข้า Boot loader ก่อน ประมาณ 5 วินาที จึง Run code ปกติ 
2. ไม่สามารถ Debug ทาง Serial monitor แบบธรรมดาๆ ได้
- ทางแก้ ให้ใช้ Software serial port แล้วต่อเข้ากับตัวแปลง USB-serial เพื่อ Monitor ต่อไป
3. Program memory น้อยเมื่อเทียบกับ ESP-8266


👍👍👍👍👍


วันศุกร์ที่ 5 สิงหาคม พ.ศ. 2565

How to use PuTTY as Serial Port monitoring program in Windows 11




 1. Checking port number in Windows 11, Device Manager->Ports(COM&LPT) , in this example it is COM7.



2. In PuTTY program. Category->Connection , Click "Serial". then set Serial port configuration as the following picture.



3. Click at  Category->Session, Select Basic option as following picture.




4. Now it's Work!!

Done!!


*********************************************************************************







วันพุธที่ 8 มิถุนายน พ.ศ. 2565

ESP8266 when use Serial port for communications , How to use Serial1 for print debuging messages to Serial monitor ?.

 ปัญหาหนึ่งในการใช้ Serial port ของ Node MCU ESP8266 นั่นก็คือเมื่อเราต้องการใช้ Hardware serial port (UART0) ในการเชื่อมต่อกับอุปกรณ์เพื่อสื่อสาร(Communication) หรือส่งคำสั่งควบคุม(Control)  ตัวอย่างเช่นอุปกรณ์ GPS, GPRS Module หรือ ใช้แปลงเป็น Port RS-485 เพื่อใช้ควบคุมอุปกรณ์ต่างเป็นต้น เราก็จะใช้ Serial port ในการพิมพ์ข้อความ Debug เหมือนปกติไม่ได้ เพราะเมื่อเราส่งข้อความ Debug ไปยัง Serial port ถึงแม้ข้อความเหล่านี้จะสามารถแสดงออกทาง Serial Monitor ได้ แต่ขณะเดียวกันข้อความเหล่านี้ก็ถูกส่งไปให้กับอุปกรณ์ที่เราเชื่อมต่ออยู่ทาง Serial Port ด้วย ซึ่งมีโอกาสที่อุปกรณ์จะทำงานผิดพลาดได้



รูปการทำงานของ Serial Port ของ ESP8266 (Node MCU) ในสภาวะปกติ

ดังนั้นจึงต้องทำการ Redirect Serial port ให้ไปใช้ขาอื่น โดยการใช้คำสั่ง Serial.swap()  หลังคำสั่ง Serial.begin ซึ่งจะทำให้ขา Tx ของ Serial port ซึ่งเดิมจะเป็นขา GPIO1(D10) ไปใช้งานขา GPIO15(D8) แทน และขา Rx เดิมเป็นขาGPIO3(D9) ไปใช้งานที่ขา  GPIO13(D7)

และเมื่อต้องการที่จะส่งข้อความ Debug ออกไปทาง Serial Monitor เราก็ต้องมาใช้ Serial1 แทน โดยปกติแล้ว Serial1 เราจะสามารถใช้งานสำหรับส่งข้อมูลออกได้อย่างเดียวไม่สามารถใช้รับข้อมูลได้ ซึงจะมีขา Tx อยู่ที่ GPIO2 (D4)  ให้เราทำการต่อ(Hardwire) ขา GPIO2 (D4) เข้ากับขา GPIO1(D10) เพื่อให้ Serial monitor (USB Serial Chip) ซึ่งต่ออยู่กับขานี้สามารถนำข้อมูลแสดงบนจอได้

                                รูปตัวอย่าง Code ที่ใช้งาน Swap และ Serial1 ในการ Monitor




รูปการ Redirect ของ Serial Port ESP8266 (Node MCU) หลังจากใช้คำสั่ง Serial.swap()


ข้อดีของการใช้  Hardware Serial port ในการรับส่งข้อมูลก็คือจะไม่ไปรบกวนการทำงานของ ฟังก์ชั่น WiFi ซึงเป็นข้อเสียของการใช้ Software Serial นั้นเองครับ ...