Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - ozuke

#1
คือผมหาข้อมูลมาพอสมควรในการที่จะใช้งานขาสองขานี้ให้ได้
ถ้าท่านไหนมีคำแนะนำก็รบกวนหน่อยนะครับ
อันนี้ตำแหน่งขาที่ LoLin โฆษณาเอาไว้ และวงจรที่น่าจะเป็นของ ESP-12 ในส่วนของการเชื่อมต่อ Flash Memory

#2
ออกตัวก่อนนะครับ ผมใช้ SmingFramwork กับโปรแกรม Eclipse
ซึ่งนี่เป็นครั้งแรกที่ได้ทดลองใช้งาน ESP8266 มันเป็นอะไรที่วุ่นวายมาก
กับการคลำหาวิธีการใช้งานมันโดยไม่มีผู้ช่วยแนะนำในช่วงแรก

เข้าเรื่องเลยดีกว่า
คือผมเคยตั้งคำถามใน Facebook ไปแล้วรอบนึงว่าถ้าผมจะใช้ขา GPIO9, 10
หรือขาที่ NodeMCU V3 เขียนแปะไว้ว่าเป็น S3, S2 มันสามารถใช้งานเป็น
GPIO ได้รึปล่าว เห็นเขียนบอกเอาไว้ สรุปว่าคำถามผมไม่รู้ไม่ดีรึปล่าว
เลยไม่มีคนตอบ มีแต่คนกด Like กันเต็มเลยฮ่าๆๆๆ
#ขออภัยในที่นี้ด้วย
กลับมาเข้าเรื่องกันต่อครับ พอผมไม่ได้คำตอบ ตามกระบวนการธรรมชาติของผมจึงเกิดเหตุการที่ว่า
ถ้าไม่มีคำตอบจากคำถาม เราก็ควรจะหาคำตอบด้วยตัวเอง โดยการงมโข่งเป็นเวลา 2 อาทิตย์ในการปะติดปะต่อ มั่วซั่วและถามเพื่อนที่เคยใช้ NodeMCU อันอื่นๆ

เพื่อนแนะนำให้ใช้ SmingFramework เพราะว่ามันเอาหน้าเพจเป็นไฟล์ HTML ยัดเข้าไปใน ESP ได้เลยผมเลยชอบ
และผมก็เริ่มลงโปรแกรม ใช้เวลา 3 วันในการมั่วไปเรื่อยจนทำให้ Windows เกือบเจ้งเพราะไปตั้งค่า PATH ด้วย Command ผิด
สรุปผมก็ลงมันได้ และเขียนไฟกระพริบได้ในที่สุด จากนั้นก็เริ่มทดลอง Example ที่มีอยู่มากพอสมควรจาก Sming ซึ่งอ่านเข้าใจง่ายมาก
แต่ข้อเสียคือ Lib มันใช้งานกับ Arduino ได้ไม่ทั้งหมด ผมพยายามหลายครั้งในการทำ Lib ใหม่เพื่อให้ผมสามารถเอา Lib จาก Arduino มาใช้งานกับ Sming

สรุปผมทำได้ครับ มันไม่ยาก แต่คนจะทำต้องบ้าพอสมควรที่จะเอาเวลาไปนั่งไล่ดูว่า Lib แต่ละอันมันโยงไปไหนกันบ้างเห่อะๆ
พอผมเริ่มทำหัวใจหลักมันได้แล้ว ผมเริ่มที่จะย้าย Lib บางอันจาก Arduino เข้ามาเช่น I2C LCD, DS1307 ซึ่งมันก็ทำงานได้แล้ว
จากเดิมที่ทำงานไม่ได้เพราะหลายข้อจำกัดเช่นใช้ GPIO16 เป็น IO นี่มันรู้สึกว่ามั่วได้ใจมาก เพราะขานี้เป็นขาของ WDT
ถ้าเราไปสั่งมันเป็น LOW แล้ว WDT มันจะรีเซทอัตโนมัติเลย ฮ่าๆ ก็อาศัยการค้นหาในอินเตอร์เน็ตสักพักใหญ่ๆ

พอผมแก้ปัญหาเรื่องขา GPIO16 ได้ผมมาต่อกันที่ขาที่ผมกลัวว่ามันจะเป็นปัญหาใหญ่สำหรับผมเลยก็ว่าได้คือขา GPIO9, 10
ที่มันต่อกับ IC Flash Memory ซึ่งจากการค้นหาข้อมูลในหลายๆเว็ปแล้ว บางเว็ปบอกใช้ได้ บางเว็ปบอกใช้ไม่ได้
#หัวร้อนเลยครับ ออกแบบ PCB สั่งทำมาแล้วฮ่าๆ
มาต่อครับ ผมได้ทดลองจั้มป์ HIGH เข้าไปที่ขาพบว่า ทำงานได้ปกติจากการการตั้งค่าให้ ESP ทำงานในโหมด DIO
แต่พอจัมป์ลง LOW เท่านั้นหล่ะ หัวร้อนเลยครับ หน้ามึดตาลายคล้ายจะเป็นลมอยู่พักใหญ่ๆ พบว่ามันค้างครับพี่น้องคือมันนี่งไปสักพักแล้ว WDT มันก็ทำงาน

สรุปผมไม่สามารถใช้งานโมดูลขา GPIO9, 10 ได้เลยในช่วงเวลานั้นจนถึงเวลานี้ ผมเลยเกิดอาการอยากจะแงะมัน ฮ่าๆๆๆๆๆ
#ขอสักตัวละกันครับหัวหน้า พูดในใจเพื่อขออนุญาติลูกพี่ก่อนแกะของเขาพัง
ผมแกะออกมาแล้วพบว่า LoLin NodeMCU V3 ใช้ ESP-12E และขามันก็ไม่ได้ตรงตามที่เขาโฆษณาเอาไว้นั้นคือ GPIO9, 10 ไม่ได้อยู่ที่ขา
S2, S3 มันไปอยู่ขา SK, S3 แทน #เกิดอาการหัวร้อนขึ้นอีก และจากการวัด ขา 7, 3 ของ IC 25Q40 พบว่าขาทั้งสองยังต่อกับ ESP8266 อยู่
ซึ่งมองเผินๆ สองขานี้ไม่ใช้ก็ได้ จะสั้ง HIGH, LOW ก็ได้นะ หากเราใช้งานโหมด DIO แต่ผมก็ยังใช้งานมันไม่ได้อยู่ดีฮ่าๆ
จนถึงนาทีที่ผมแอบมาเล่นเว็ปตั้งกระทู้ ผมก็ยังใช้งานขาทั้งสองไม่ได้

ผมมีคำถาม ท่านไหนเคยใช้สองขานี้ต่อเป็น IO บ้างครับ แล้วใช้ได้ไหม?
#3
พอดีผมใช้ websocket ของ tornado เขียนเพื่อจะลองควบคุม GPIO ของ Raspberry Pi ครับ
แต่ปัญหาอยู่ตรงนี้ครับ

ตอนเชื่อมต่อโดยเปิด Browser บน Raspberry Pi ทุกอย่างทำงานปกติคือสามารถสื่อสารข้อมูลกันได้
แต่ผมมาเปิดบนเครื่องที่เป็น PC โดยใช้ Google Chrome มันกลับไม่ทำงานหน่ะครับ ผมส่งข้อมูลอะไรไป
เหมือนข้อมูลจะไปค้างที่ไหนซักแห่ง แต่พอผมกด Ctrl+C เพื่อออกจากโปรแกรม Phyton(บน RPi) มันกลับส่งข้อมูลที่เคยสื่อสารกันขึ้นมาหมดเลย

ผมอยากจะสอบถามว่าหลังจากที่ผมติดตั้ง tornado บน raspberry pi แล้วผมต้องไปตั้งค่าอะไรอีกไหมครับผมถึงจะใช้งาน
websocket ให้สามารถส่งข้อมูลออกภายนอกตัว Raspberry Pi ได้

ภาพประกอบด้านล่างนะครับ
ขอบคุณทุกท่านครับ ;D
#4
lcd clear ใช้ lcd_putc('\f');
อีกอันลืม จำได้ว่าใช้ lcd_send_byte(0,xxx);ไอ้ตรง xxx นี่จำไม่ได้ละ
#5
adc ครับ รู้จักไหมครับ
#6
ผมก็งงครับ แต่ผมก็หาจนเจอะ

http://www.doctormonk.com/2012/01/arduino-timer-library.html

เนื่องจาก Lib Timer ที่คุณว่านั้นมันเป็นตัวจำลอง Timer ขึ้นมา
จึงไม่สามารถจับเวลาด้วยตัวมันเองได้ หรือทำงานเป็น Background ได้
ดังคำสั่ง t.update(); จึงเป็นคำสั่งให้ Object Timer นั้นอัพเดทเวลาของตัวเอง


อ้างอิงจากโค้ดบรรทัดที่ 112 - 127 ของไฟล์ Timer/Timer.cpp
void Timer::update(void)
{
unsigned long now = millis();
update(now);
}

void Timer::update(unsigned long now)
{
for (int8_t i = 0; i < MAX_NUMBER_OF_EVENTS; i++)
{
if (_events[i].eventType != EVENT_NONE)
{
_events[i].update(now);
}
}
}


จากโค้ดจะเห็นว่าคำสั่ง update(); จะมีไว้สำหรับอัพเดทเวลา
เมื่อเวลานั้นมากกว่าหรือเท่ากับเวลาที่ตั้งเอาไว้โปรแกรมก็จะโดดไปทำงานตาม Event ที่เราตั้งค่าเอาไว้ครับ

"ถ้าผมลบคำสั่ง t.update() ออกหรือมาสั่งงานคำสั่งนี้ช้าหล่ะ?"
มันก็จะเกิดความผิดเพี้ยนทางเวลาของ Event ที่คุณตั้งไว้ครับ
#7
"กำบัว" :o :o :o :o

ศึกษาเรื่อง Boot loader ครับใน PIC ก็มีเหมือนกัน

หลักการก็คือเมื่อเวลาระบบมีการแจ้งเตือน Software ใหม่จาก Server หรือตัวแม่
ตัว Client จะทำการเปลี่ยนแปลง Chanel สื่อสารออกไปอีก Chanel หนึ่งซึ่งเอาไว้สำหรับทำ OTA ครับ
จากนั้นมันจะค้นหา Start Package จากข้อมูลที่มันรับมาซึ่ง Server จะส่งมาตลอดเวลา

สมมุติว่า Server ส่ง A-Z แล้วก็ส่ง A-Z อีกไปเรื่อยๆ
เครื่องเราจะต้องรอข้อมูลตัว A ก่อนซึ่งเป็น Start Package จากนั้นจะดึงเอาข้อมูลนั้นมาเก็บไว้หน่วยความจำภายนอกก่อนเช่น EEPROM
หรือหากระบบ Bootlader นั้นมีความจุพอที่จะเขียนโปรแกรมที่จะติดต่อกับ Server ได้ก็ไม่จำเป็นต้องมีครับ

กลับมาเข้าทางกันต่อ เมื่อเก็บข้อมูลไว้หน่วยความจำภายนอกแล้ว ก็ระรีบูท MCU แล้วเข้าโหมด Bootloader ครับ
เพื่อเอาโปรแกรมที่เก็บไว้หน่วยความจำภายนอกมาเขียนลงในตัวมันเอง

จากนั้น Reboot ตัวเองอีกทีเพื่อกลับไปทำงานตามโปรแกรมใหม่ที่โหลดมาครับ

ผลเคยใช้วิธีนี้อยู่ครับ แต่ใช้กับ MCU ตะกูล AVR ครับ
มีทั้ง OTA และแบบที่ใช้โมดูล EEPROM ตัวเล็กๆไปเสียบเพื่ออัพโหลดโปรแกรมเข้า MCU ใหม่โดยไม่ต้องใช้ PC ครับ

น่าจะพอเป็นแนวทางได้เนาะ
นานๆทีผมจะได้เข้ามาตอบเห่อะๆ ขออภัยด้วยหากไม่เข้าใจ
#8
บ่ต่างกันเท่าไรดอกครับ SHT-11 กับ 15 ต่างกันแค่ Error โค้ดการอ่านพอๆกันครับใช้ด้วยกันได้ ^_^ :P
แต่เซนเซอร์น่าจะใช้แบบที่ Admin บอกนะครับ มันวัดความชื้นในดินได้