ผมซื้อมา 2 ตัว ตัวแรกใช้ AT Command ผ่าน serial monitor ได้ อีกตัวไม่ได้ ลองเอาตัวที่ปกติมาลองทำตามขั้น เปิดปิด LED พบว่ามันหยุดที่ AT+RST ผมต่อตาม clip video เลยครับ ผมลองกับโปรแกรมอื่น ปรากฎว่าใช้ softwareserial ไม่ได้ ผมใช้กับ arduino uno
ไม่ทราบว่าต้องทำไรเพิ่มเติมไหม หรือ module เสียครับ เพราะเห็นบางคนไม่แนะนำต่อตรงให้ต่อผ่าน logic level converter
ตอนแรกผมก็เจอปัญหานี้ครับ พบว่า
1. ESP8266-01 ค่าโรงงานคือ baud rate 115200 bps ตรงนี้สำคัญมากครับ ต้องตั้ง baud rate ให้ตรง แล้วเวลาทดสอบให้ใช้คำสั่ง AT+GMR แทนครับ ถ้า ESP8266 ตอบกลับมาถูกต้อง แสดงว่าใช้ได้แล้ว
2.ถ้าใช้ (ผมก็ใช้) software serial ซึ่งตัว software serial นี้มี baud rate สูงสุดที่ 19200bps (การันตีที่ 9600bps เกินนี้ต้องลองเอง) ทั้งนี้เนื่องจาก error ของ clock speed ใน controller เอง ถ้าจะใช้ ESP8266 กับ softserial ต้องต่อ ESP8266 กับ serial port ธรรมดาก่อน แล้วส่งคำสั่ง AT+UART_DEF=9600,8,1,0,0 คำสั่งนี้จะตั้งค่าโรงานจาก 115200 เป็น 9600 แทน ส่งคำสั่งอื่น baudrate จะกลับมาที่ 115200 หลัง reset จากนั้นถึงเอาไปใช้กับ softserial ได้
3. คำสั่ง AT command ทุกอัน ต้องเป็นตัวพิมพ์ใหญ่หมด ตัวพิมพ์เล็กมันไม่รู้จัก
4. ESP8266-01 ผมซื้อจากร้านนี้มา 2 ตัว เป็น ESP8266-01S ตัวนึง กับ ESP8266-01 อีกตัว พบว่ามีตัวนึงใช้ AT command ได้ ส่วนอีกตัวใช้ไม่ได้ ตัวที่ใช้ไม่ได้เนื่องจากไม่มี firmware ของ AT command อยู่ ดูได้จาก AT+GMR flash ลงไปใหม่ก็หาย เพราะ ESP8266 จะมี firmware อยู่ 3 ส่วน คือ ESP8266-01 firmware + AT command firmware + factory default setting firmware
5. ทั้งหมดต่อตรง ไม่ต้องผ่าน logic converter ยกเว้นไฟเลี้ยง ต้องใช้ 3.3v ซึ่งต่อตรงจาก UNO ก็พอ
6.ผมเดาว่าคุณใช้ UNO R3 ส่วนผมใช้ UNO R3 SMD มันจะใช้ serial monitor ไม่ได้เลย ดีว่ามี USB to TTL อยู่ เลยตั้งค่า default baud rate ได้
โมดูลไม่น่ามีปัญหานะครับ รับประกันให้ทุกชิ้น ลองทำตามที่คุณธีรพงษ์แนะนำ
ขอเสริมว่า ให้ใช้ Arduino IDE จะเขียนง่ายกว่า มีคอร์สสอน ESP8266 ของทางเว็บ ลองศึกษาการใช้งานได้ฟรีครับ
ใช่แล้วครับ
การโปรแกรมใหม่ เหมือนกับการโปรแกรมทั่ว ๆ ไป ผ่านขา rx,tx แบบเดียวกับโปรแกรมด้วย Arduino IDE
ผมใช้ ESP8266-01 เป็น wifi ต่อกับ UNO SMD อยู่ครับ เพราะต้องใช้ขา analog input. ใช้ UNO คุยกับ ESP8266-01 ผ่าน softserial ครับ
ที่ต้องถอดเอา ATmega328 ออก เพราะเขาต้องการใช้ USB to TTL ที่อยู่บน UNO board ในการคุยระหว่าง Serial port กัย Serial ของ ESP8266-01 เท่านั้นครับ ถ้าไม่ถอดออก ตัว ATmega328 จะไป block serial communication ทำให้โปรแกรม ESP8266 ไม่ได้ ส่วนแบบ SMD มันถอดไม่ได้ ก็แค่นั้นครับ ไม่เกี่ยวกับความสามารถของ UNO
คือสรุปว่า UNO ที่ถอด ATmega328 มันก็คือแหล่งจ่ายไฟ + USB to TTL ดีๆ นี่เอง
ส่วนตัวผมนั้นใช้ USB to TTL ในการต่อกับ ESP8266-01 แล้วส่ง AT command ลงไปเปลี่ยน baud rate ครับ
อย่างที่บอกครับ ก่อนใช้งาน ต้องตั้ง default baud rate ของ ESP8266 เป็น 9600 bps ก่อน เสร็จแล้วต่อขา digital pin 2 เข้า Rx ของ ESP8266 และ pin3 เข้า Tx แล้วโหลด sketch นี้ลงไปที่ UNO
#include
SoftwareSerial EPS8266_Serial(3, 2); // UNO RX,TX
void setup() {
Serial.begin(9600); //USB Serial Port
EPS8266_Serial.begin(9600); //ESP8266 serial port
EPS8266_Serial.println("AT+GMR");
}
void loop() {
while (Serial.available())
EPS8266_Serial.write(Serial.read());
while (EPS8266_Serial.available())
Serial.write(EPS8266_Serial.read());
}
โหลด sketch นี้แล้ว ตั้ง baud rate เป็น 9600 ที่ serial monitor ตอนทดสอบนะครับ sketch นี้แค่อ่านเขียนค่าระหว่าง serial port กับ softserial ครับ
แต่ถ้าคุณอยากใช้ ESP8266-01 แทน UNO เลยก็ใช้ได้ครับ ผมใช้อยู่ แต่ผม write sketch ด้วย Arduino IDE ผ่าน USB to TTL เข้า ESP-01 เลยครับ
ไม่เคยลอง write sketch ด้วย Arduino IDE ผ่าน Arduino as ISP เข้า ESP-01 ครับ อย่างที่บอก ติดเรื่อง baud rate ทั้ง ESP เอง และ baud rate ในการเขียน sketch ของ IDE เอง ต้องไปศึกษาดูว่าตัว IDE มันตั้งค่า baud rate ตรงไหน ถ้าคุณอยากลองศึกษาดูก็ได้ครับ
สำหรับผม เสียเงินซื้อ adapter ไม่ถึงร้อย ประหยัดเวลาขึ้นเยอะครับ เอาเวลาไปศึกษาโค๊ดตัวอื่นดีกว่า
ถ้าคุณจะเอา ESP ไปใช้กับ Arduino 3.3V พวก pro micro 3.3v ก็จะมีปัญหาเดียวกัน เพราะ Arduiono 3.3v ใช้ clock speed ที่ 8MHz ทำให้มี baud rate สูงสุดที่ 57600 bps เท่านั้น
ดังนั้น ต้องถามว่าคุณอยากจะได้อะไรกันแน่
1. ใช้ Auduino IDE เขียน UNO sketch โหลดลง UNO แล้วใช้ ESP-01 ต่อ WiFi ให้ UNO โดยให้ UNO คุยกับ ESP-01 ผ่าน AT command
2. ใช้ Auduino IDE เขียน ESP8266 sketch โหลดลง ESP-01 โดยพยายามใช้ UNO เป็น programmer แบบนี้ ใช้ USB to TTL สะดวกกว่าเยอะครับ
ใช่ครับ ใน arduino uno จะมีภาค usb ttl ซึ่งปกติจะต่อกับขา rx,tx ของ ic atmega328P เพื่อใช้ในการโปรแกรม
การโปรแกรม esp8266 จะผ่านทาง usb ttl ซึ่งถ้ามี arduino uno ก็สามาถใช้ส่วนนี้ต่อเพื่อโปรแกรมได้ ก็จะประหยัดได้นิดหน่อย
การใช้งานเพื่อที่จะไม่ชนกับขา arduino ก็ต้องถอด ic ออกก่อน ดังนั้น arduino รุ่นที่เป็น smd จะใช้ฟังก์ชันนี้ไม่ได้ ก็ต้องซื้อ usb ttl เพิ่ม
การใช้โมดูล usb ttl แบบแยก ก็ต่อขาตำแหน่งเดียวกันกับแบบ arduino uno ดังนั้นถ้าใช้งานเป็นแล้ว ก็ใช้แบบไหนก็ได้
สำหรับ nodemcu ก็คือ esp8266 รุ่น esp-12E ที่รวม ภาคจ่ายไฟ + ภาค usb ttl + ขยายขาให้ทดลองได้ง่าย
ถ้าใช้ nodemcu ได้ ก็แสดงว่าใช้ esp8266 ได้แล้วครับ