Arduino code แจ งเต อนอ ณหภ ม sms

และจอแบบ touch screen มาทำเป็นโทรศัพท์ DIY กัน ดังนั้นคิดง่ายๆครับ โทรศัพท์มือถือ (รุ่น Basic นะครับไม่ใช่ Smart phone) ทำอะไรได้ จะโทร จะส่ง/รับ SMS ท่อง Internet โมดูลนี้ก็ทำได้เช่นเดียวกัน

ทีนี้มาที่อุปกรณ์ที่ต้องการในการทดลองวันนี้ครับ

1. Power adapter ×1 (supply current>800mA) ที่ต้องใช้ Adapter ก็เพราะกระแสที่จ่ายจากบอร์ด Arduino ไม่พอจ่ายบอร์ด GPRS/GSM นะครับ

2. EFCom V1.2 ×1 + Antenna (อันนี้คือชื่อบอร์ด GPRS / GSM Module )

3. Arduino UNO R3 ×1

4. SIM card ×1(GSM/GPRS 850/900/1800/1900MHz )สังเกตหน่อยนะครับ ต้องเป็น SIM ขนาดปกติ (ไม่ใช่ MICRO หรือ NANO SIM) และไม่ใช่ SIM3G

5. USB cable ×1

หมายเหตุ GPRS / GSM Module ของร้าน Arduitronics ขายเป็นชุด ประกอบด้วย ตัวบอร์ด EFCOM V1.2 + Power adapter + Antenna ทำให้พร้อมใช้งานกับ Arduino UNO R3

เมื่อสังเกตที่ตัวบอร์ด GPRS / GSM Module จะเห็นว่ามีส่วนประกอบสำคัญต่างๆดังนี้

1. พอร์ดเสียบ Audio

2. พอร์ดเสียบ MIC

3. พอร์ดเสียบ Antenna

4. ช่องเสียบ SIM Card

5. ปุ่มกดเพื่อ Reset, PWR, S_RST

6. LED แสดงสถานะแรงดันเข้าบอร์ด (PWR) + แสดงสถานะการทำงานของโมดูล (STA) + แสดงสถานะการเชื่อมต่อกับระบบมือถือ (NET)

ด้านหน้าของบอร์ด

Arduino code แจ งเต อนอ ณหภ ม sms

ด้านหลังของบอร์ด

Arduino code แจ งเต อนอ ณหภ ม sms

หลังจากเสียบ SIM Card เข้าไป ติดเสาอากาศ และติดตั้งบน Arduino UNO R3 และจ่ายแรงดันไฟฟ้าโดยใช้ Adapter ที่ให้ไปด้วยจะเห็นไฟ PWR และ STA ติด จากนั้นไฟ NET ก็จะเริ่มกระพริบ ซึ่งหมายถึงบอร์ดพยายามติดต่อกับระบบเครือข่าย

ความหมายของไฟแสดงสถานะ

LEDStateFunction Status Off Power Off On Power On Netlight OffSIM900 is not working64ms On/800ms OffSIM900 does not find the network64ms On/3000ms OffSIM900 find the network64ms On/300ms OffGPRS communication

พร้อมแล้วเราจะเริ่มคุยกับ GPRS / GSM Module แล้วนะครับ ก่อนอื่นต้องเข้าใจวิธีที่จะสื่อสารและออกคำสั่งกับบอร์ดนี้ซะก่อน GPRS / GSM Module จะทำงานโดยใช้ชุดคำสั่ง AT Command นะครับ

โดยปกติเราจะคุยกับบอร์ด GPRS / GSM Module โดยไม่มี Arduino UNO R3 ก็ย่อมทำได้ แต่ต้องทำผ่านการสื่อสารแบบอนุกรม UART กับบอร์ด โดยส่งคำสั่ง AT Command ผ่าน UART ที่ว่าเข้าไปที่ Software Serial Port แต่ในเมื่อเรามี Arduino UNO R3 ซะอย่าง ทำอะไรก็ผ่าน Arduino ก็ได้ แถมเราสามารถใช้มันควบคู่กับคำสั่งแบบปกติที่เขียนบน Arduino Sketch ได้ด้วย

ต้องมาทำความเข้าใจกันก่อนนะครับว่าการสื่อสารแบบ Serial ผ่านบอร์ด Arduino มี 2 ลักษณะนะครับ คือ

1. ผ่าน FTDI เรียกว่า Hardware Serial Communication (TX, RX) ซึ่งจะเป็นการสื่อสารที่ใช้ Upload Sketch และการส่งข้อมูลบน Serial Monitor

2. ผ่าน Software Serial ซึ่งจะเป็นการกำหนดขา (Digital PIN) TX และ RX เองที่อยู่บนตัวบอร์ด กรณีนี้ต้องใช้ Library เพิม (

include )

สำหรับบอร์ด GPRS/GSM Module นั้น บอร์ดถูกออกแบบมาให้ใช้ PIN 2 เป็น TX และ PIN 3 เป็น RX และต้อง Set Jumper บนบอร์ดให้ตรงกันด้วย (ปกติจะเสียบไว้ให้แล้วตั้งแต่ต้น) ลองดูตามรูปนะครับ

Arduino code แจ งเต อนอ ณหภ ม sms

ทีนี้ถ้าจะลองว่าเมื่อติดตั้ง SIM card ลงไปแล้วมันทำงานปกติรึเปล่าก็ให้ทดลองดังต่อไปนี้นะครับ

1. เสียบทุกอย่างให้พร้อมตามที่อธิบายข้างต้น

2. Upload Sketch ด้านล่างเข้าไปใน Arduino UNO R3

ขออธิบายนิดนะครับว่า Sketch นี้มันทำอะไร อย่างที่อธิบายครับ เราต้องใช้ Software Serial ในการส่ง AT Commnand เข้าไปใน GPRS / GSM Module ของเรา เพราะมันถูกเลือกให้ส่งผ่าน Digital Pin 2 (TX) และ 3 (RX) ไม่สามารถส่งผ่าน TX, RX ทางเดียวกับที่เราใช้คุยผ่าน Serial Monitor ซึ่งเป็น Hardware Serial

ดังนั้นในช่วง Loop() จะเห็นว่าเราจะส่งคำสั่งผ่านไปที่ Hardware Serial (ซึ่งก็คือ สาย USB ที่เสียบกับ PC) ช่องทางปกติเดียวกับ Serial Monitor ด้วย BaudRate 19,200 ลองดูรูปด้านล่างประกอบนะครับ และ Software Serial ซึ่งใช้ Digital Pin 2 (TX) และ 3 (RX) เป็นตัวคุยส่งไปที่ GPRS / GSM Module อีกทีด้วยความเร็ว BaudRate 115,200

//Serial Relay - Arduino will patch a
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART

include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);
void setup()
{
mySerial.begin(19200); // the GPRS baud rate
Serial.begin(19200); // the GPRS baud rate
}
void loop()
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}

Arduino code แจ งเต อนอ ณหภ ม sms

3. ถีงตอนนี้เราจะลองส่งคำสั่ง AT Command ให้บอร์ดผ่าน Arduino นะครับ แต่เนื่องจากเหตุใด ผมก็ยังไม่รู้ เราต้องใช้โปรแกรม Hyperterminal มาส่งคำสั่งแทน Serial Monitor โดยโปรแกรมที่ผมใช้ก็คือ Tera Term ครับ ก็ลอง Download แล้ว Install Program ดูนะครับ (ผมใช้ Windows 8 64 bit เลยไม่มี hyperterminal ที่มากับ Windows แบบ Windows รุ่นก่อนๆ)

เปิดโปรแกรม Tera Term แล้วอย่าลืม Set ให้มี BaudRate เป็น 19200 กับ COM PORT ที่ถูกต้องตรงกับ Arduino UNO R3 นะครับ จากนั้นให้ไปกดปุ่ม "S_PWR" เพื่อเริ่มต้นการติดต่อเข้าระบบเครือข่ายมือถือ รอซักพักจะเห็นว่า LED สีแดงที่เขียนว่า "NET" จะเริ่มกระพริบทุกๆ 3 วินาที

Arduino code แจ งเต อนอ ณหภ ม sms

Arduino code แจ งเต อนอ ณหภ ม sms

ถ้าทำทุกอย่างถูกต้องและทำงานปกติด จะพบว่ามีข้อความจาก GPRS / GSM Module แสดงดังรูปด้านล่างนะครับ

Arduino code แจ งเต อนอ ณหภ ม sms

ทีนี้ลองป้อนคำสั่งแรกสุดดูนะครับ พิมพ์ "AT" (ไม่มีเครื่องหมายคำพูด) ถ้าบอร์ด GPRS / GSM Module ทำงานปกติและพร้อมรับคำสั่ง ก็จะแสดงคำว่า OK

Arduino code แจ งเต อนอ ณหภ ม sms

ลองคำสั่งอื่นดูครับ เช่น

ส่ง SMS ไปหามือถืออีกเครื่องนึง

1. ติดตั้งทุกอย่าง Upload Sketch บน Arduino UNO R3 ตามที่เขียนข้างต้น

2. ลองคำสั่ง AT+CMGF=1 แล้วกด ENTER บอร์ดจะส่งคำว่า OK กลับมา คำสั่งนี้จะเป็นการบอกให้ ส่ง SMS เป็น Simple Text mode คือ ส่งโดยไม่มี Unicode หรือ ข้อมูลชนิดอื่น

3. ส่ง AT+CMGS="0818765432" (เปลี่ยนเลขหมายด้วยนะครับ เดี๋ยวส่งไปหาใครก็ไม่รู้) แล้วกด ENTER จะได้เครื่องหมาย > กลับมา แสดงว่าพร้อมส่ง SMS แล้ว

4. จากนั้นเริ่มส่งข้อความเลยครับ เช่น HELLO WORLD แล้วปิดท้ายด้วยการกด Ctrl+Z เพื่อแสดงว่าข้อความนั้นจบแล้ว จากนั้นระบบจะตอบกลับว่า OK ซักพักก็จะได้ข้อความในมือถือนะครับ

Arduino code แจ งเต อนอ ณหภ ม sms

เรื่องการส่งข้อความนั้นลองหาข้อมูลเพิ่มเติมได้ที่นี่ครับ

http://www.elecfreaks.com/wiki/index.php?title=EFCom_GPRS/GSM_Shield

http://www.developershome.com/sms/readSmsByAtCommands.asp

คราวนี้ลองโทรเข้ามือถืออีกเครื่องดูครับ

1. ลองคำสั่งนี้ดูก่อนครับ AT+COPS? เราจะเห็นบอร์ดตอบว่า

+COPS: 0,0, "dtac"

OK

ผมใช้เครือข่ายของ DTAC นะครับ

2. ลองคำสั่ง AT+CSQ จะเป็นการเช็คความเข้มของสัญญาณครับ

Arduino code แจ งเต อนอ ณหภ ม sms

3. ทีนี้ลองโทรดูโดยใช้คำสั่ง ATD0818765432; อย่าลืมเปลี่ยนเบอร์โทรและปิดท้ายเบอร์ด้วยเครื่องหมาย Semicolon (;) นะครับ ระบบจะตอบ OK และรอฟังเสียงเรียกเข้าได้เลยครับ

4. ถ้าจะยกเลิกการโทรก็พิมพ์คำสั่ง ATH ครับ

5. ถ้าลองโทรเข้าดูจะเห็นว่ามีการแสดงคำว่า RING กลับมาครับ

Arduino code แจ งเต อนอ ณหภ ม sms

คราวนี้เรามาลองใช้คำสั่งที่ส่งผ่านจาก Arduino IDE กันครับ

เรามาลอง Upload Sketch ตามด้านล่างนี้กันครับ

//Serial Relay - Arduino will patch a
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART

include

SoftwareSerial mySerial(2, 3);
void setup()
{
mySerial.begin(19200); // the GPRS baud rate
Serial.begin(19200); // the GPRS baud rate
delay(1000);
mySerial.write("AT+CPIN?\r");
delay(10000);
mySerial.write("ATD081xxxxxxx;\r"); // Change your number here
// mySerial.write("AT+CSQ\r");
delay(20000);
mySerial.write("ATH\r");
}
void loop()
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}

ลองดูที่คำสั่ง mySerial.write("AT+CPIN?\r"); ที่อยู่ใน Setup() เป็นตัวอย่างครับ จะเห็นว่าเราใช้ Library SoftwareSerial.h ชื่อ mySerial.write เป็นตัวส่งคำสั่ง AT Command ไปที่บอร์ด GPRS / GSM Module นะครับ แต่สังเกตนิดว่าคำสั่งAT Command จะอยู่ระหว่าง " ..... " และปิดท้ายคำสั่งที่ส่งไปด้วย \r ทั้งนี้เพื่อเป็นการส่งค่า ENTER ตามไปด้วย

นอกจากนี้ ในบางครั้งเราอาจจะต้องส่งคำสั่งที่มี "..." อยู่ภายใน เช่น คำสั่งที่ใช้ส่ง SMS mySerial.write("AT+CMGS=\"+918446043032\"\r"); จะเห็นว่าเราต้องใช้ \ นำหน้า " เพื่อแสดงว่าเราตั้งใจส่งเครื่องหมาย " จริงๆ ไม่ใช่ Syntax ของ mySerial.write ครับ

ชุดคำสั่งอื่นๆ ของ AT COMMAND สามารถหาได้จาก

Manaul การใช้งาน และ AT Command

EFCOM GPRS/GSM Shield

อีกนิดนะครับ เราสามารถเขียนคำสั่งผสมกับการรับค่าจาก Sensor อื่นๆ หรือ ชุดคำสั่งการทำงานอื่นๆ ใน Sketch ได้ โดยรับค่าเช่น SMS จากบอร์ด จากนัั้นนำมาควบคุม Port อื่นๆ บนบอร์ด เช่น GPIO, PWM, และอื่นๆ ได้อีกด้วย ข้อมูลเหล่านี้สามารถศึกษาได้จาก Manual ของ AT Command นะครับ