[C# 2008] สอบถามเรื่องการใช้ gsm module sim300cz น่ะคับ
ตอนนี้ทำอะไรไปบ้างแล้วครับ Connect กับ Module ได้รึยังครับ ทำอะไรไปมั่งแล้วครับ พอดีผมมี module นี้พอดี จะมาช่วยลองให้นะครับ
Date :
2011-12-18 23:11:59
By :
kerb
คือตอนนี้ยัง connect ไม่ได้เลยคับ กำลังหาทางอยู่เหมือนกัน เพราะต้องการ connect sim300cz กับ C#2008 น่ะคับ
Date :
2011-12-18 23:29:58
By :
sim300cz
ผมใช้ sim300s V6.2 กับ C# 2010 นะครับ ตัว Module คงไม่แตกต่างกัน แต่ผมไม่แน่ใจเรื่อง C# ว่า 2 version นี้โค้ดมันจะต่างกันมากมั้ยครับ โหลด C#2010 Express มาลองใช้มั้ยครับ ได้เขียนไปในทางเดียวกัน
Date :
2011-12-18 23:36:58
By :
kerb
ได้คับ ตอนนี้หาตัว 2010 มาใช้แล้วคับ รบกวนช่วยแนะให้ด้วยนะคับ ขอบคุณคับ
Date :
2011-12-19 00:03:20
By :
sim300cz
ผมออกตัวก่อนนะครับ ว่าผมเคยเขียน C# แค่โปรแกรมเดียว คืออ่อนก็ว่าได้ หุหุ แต่ผมจะช่วยเต็มที่นะครับ แต่ผมว่ามันไม่น่ายาก เพราะคู่มือเรามีพร้อม
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx
http://www.yourportablelab.com/downloads/schematics/SIM300MMS_AT.pdf อันนี้เป็นชุดคำสั่งของ Sim300 ยังไม่แน่ใจว่าจะได้ใช้มั้ยแต่เตรียมพร้อมไว้ก่อน แต่ผมว่าน่าจะต้องใช้
ผมจะเขียน Code แบบ ดิบๆเลยนะครับ จะไปให้ถึงจุดหมายแบบเร็วที่สุด คือ ส่ง SMS
เริ่มแรกผมรู้ว่าเราต้อง Connect มันให้ได้ซะก่อนครับ Module มัน connect ผ่าน Serial Port เพราะฉะนั้น เริ่มกันเลย
Code นี้ทำหน้าที่ Connect กับ Disconnect เท่านั้นนะครับ Code ตรงที่ผม Comment คือ พวก property พื้นฐานที่ใช้กับ Module ครับ
แต่ ค่า Default มันเท่ากับค่าที่ผม กำหนดไว้ให้ ผมเลย Comment ไว้ให้ดูครับ ถ้าจะเปลี่ยนแปลงค่อยใช้ครับ
ก่อนอื่นสร้าง Button ขึ้นมาก่อนนะครับ ตั้งชื่อว่า btnConn
ส่วนตรง COM5 อันนี้เป็น port ที่ผมใช้ต่อเครื่องผมนะครับ เอาไปเปลี่ยนเป็นของคุณเองนะครับ ดูได้จาก Device Manager ที่ windows นะครับ ลองดูครับ ถ้ามัน Connect ได้จะไม่มี error ครับ และจะสลับเป็นปุ่ม Disconnect แทนครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
// Create a new SerialPort object with default settings.
static SerialPort SR = new SerialPort();
public Form1()
{
InitializeComponent();
}
// ที่ Comment เพราะค่า Default มันเป็นค่านี้อยู่แล้วครับ ผมแค่ใส่ไว้ให้รู้ว่าพวกนี้เป็น property พื้นฐานที่ใช้ครับ
private void Form1_Load(object sender, EventArgs e)
{
btnConn.Text = "Connect";
// Set the appropriate properties.
SR.PortName = "COM5";
//SR.BaudRate = 9600;
//SR.Parity = Parity.None;
//SR.DataBits = 8;
//SR.StopBits = StopBits.One;
//SR.Handshake = Handshake.None;
// Set the read/write timeouts
//SR.ReadTimeout = 500;
//SR.WriteTimeout = 500;
}
private void btnConn_Click(object sender, EventArgs e)
{
if (btnConn.Text == "Connect")
{
SR.Open();
if (SR.IsOpen)
{
btnConn.Text = "DisConnect";
}
}
else {
SR.Close();
btnConn.Text = "Connect";
}
}
}
}
Date :
2011-12-19 01:56:45
By :
kerb
จริงๆ ถ้าไม่ได้เปลี่ยนค่าอะไรเลย เราสามารถกำหนด port name ได้ตั้งแต่ประกาศ Object เลยครับ แบบนี้
Code (C#)
static SerialPort SR = new SerialPort("COM5");
Date :
2011-12-19 02:03:14
By :
kerb
ตอนนี้ผมเจอปัญหาละครับ Module ผมไม่รู้มันใช้ได้จริงรึป่าว ซื้อมาไม่เคยเล่นเลย วันนี้วันแรก ลอง test send command ด้วย telnet ไป นิ่งเลย ไม่มี response
ช่วยลองทดสอบของคุณด้วยนะครับ ว่าใช้ได้มั้ย
http://wintesla2003.com/topic/143051
Date :
2011-12-19 04:40:34
By :
kerb
ตอนนี้ผมลองทำตามแล้วคับ ส่วนแรกเรื่องการ connect serial port ใช้ได้ปกติ คือพอกด connect จะสลับเป็น disconnect
ต่อมาส่วนที่ 2 ลองทดสอบตาม http://wintesla2003.com/topic/143051 ใช้ได้ตามปกติคับ โดยทดลองโทรออก / ส่ง sms ผ่านทาง module ได้
Date :
2011-12-19 20:07:32
By :
sim300cz
ถ้างั้นก็โอเคเลยครับ แต่ของผมเน่าชัวร์ ของจีนแดง ต้องทำใจ เดี๋ยวผมจะเอา Code มาให้นะครับ ผมลืม Save ไว้ หายไปหมดเลย เดี๋ยวทำให้ใหม่นะครับ ตอนนี้ทำไปถึงไหนแล้วครับ ถ้าใจร้อน รอผมไม่ไหว ก็ให้ไปอ่านที่นี่ครับ Code ตัวอย่างที่ link นี้ ผมว่าจะ Modify มาใช้กับของเราได้ครับ ลองเล่นไปก่อนละกันครับ ถ้าได้ก็มาบอกผมมั่งนะครับ
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx
Date :
2011-12-20 13:56:04
By :
kerb
ได้คับ จะลองไปดูก่อน แต่ยังไงก้อรบกวนด้วยนะคับ
Date :
2011-12-20 18:39:37
By :
sim300cz
ช่วย Add msn หรือ Skype ผมมาหน่อยได้มั้ยครับ [email protected]
Date :
2011-12-20 18:59:21
By :
kerb
add MSN ไปแล้วนะคับ
Date :
2011-12-21 19:35:33
By :
sim300cz
ในเมื่อเราทำการ Test บน Hyper ได้แล้ว งั้นเราก็จำลอง Hyper ในส่วนของ Respond มาอยู่บน C# ดีกว่า เพื่อเป็นการทดสอบ Event เมื่อมีการรับข้อมูลเข้ามา
Code นี้ เราเพิ่ม RichTextBox เข้าไปนะครับ ตั้งชื่อว่า rtbRespond เพื่อใช้แสดง Respond
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
// Create a new SerialPort object with default settings.
static SerialPort SR = new SerialPort();
public Form1()
{
InitializeComponent();
}
// ที่ Comment เพราะค่า Default มันเป็นค่านี้อยู่แล้วครับ ผมแค่ใส่ไว้ให้รู้ว่าพวกนี้เป็น property พื้นฐานที่ใช้ครับ
private void Form1_Load(object sender, EventArgs e)
{
btnConn.Text = "Connect";
btnSend.Text = "Send SMS";
// Set the appropriate properties.
SR.PortName = "COM5";
//SR.BaudRate = 9600;
//SR.Parity = Parity.None;
//SR.DataBits = 8;
//SR.StopBits = StopBits.One;
//SR.Handshake = Handshake.None;
// Set the read/write timeouts
//SR.ReadTimeout = 500;
//SR.WriteTimeout = 500;
SR.DataReceived+=new SerialDataReceivedEventHandler(SR_DataReceived);
}
private void SR_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
rtbRespond.AppendText(indata);
}
private void btnConn_Click(object sender, EventArgs e)
{
if (btnConn.Text == "Connect")
{
SR.Open();
if (SR.IsOpen)
{
btnConn.Text = "DisConnect";
}
}
else
{
SR.Close();
btnConn.Text = "Connect";
}
}
}
}
Date :
2011-12-22 22:51:01
By :
kerb
แก้ไขโค้ดด้านบนนิดนึงนะครับ เนื่องจากมี error ว่า cross-thread operation not vaild : control 'rtbRespond' accessed from a thread other than the thread it was created on. ผมยังไม่ขออธิบายในส่วนนี้ละกัน เพราะผมยังไม่มั่นใจว่าผมเข้าใจถูกมั้ย แต่ Case นี้มันแก้ได้ด้วยการ Invoke ครับ
Code (PHP)
private void SR_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
if (rtbRespond.InvokeRequired)
{
rtbRespond.Invoke(new MethodInvoker(delegate { rtbRespond.AppendText(indata); }));
}
else {
rtbRespond.AppendText(indata);
}
}
Date :
2011-12-23 01:56:31
By :
kerb
เรียบร้อยแล้วครับ Code สำหรับส่ง SMS ผ่าน Module Sim 300 พอดี Module ผมใช้ได้แล้วครับ สรุปจ่ายไฟไม่พอนึกว่ามันใช้แค่ 4.5V ไปหาเจอมันบอก 12V ถึงว่าไม่ทำงาน ของพี่จีนแดงยังถือว่าโอเคอยู่ ลองดูครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SendSMS
{
public partial class Form1 : Form
{
// Create a new SerialPort object with default settings.
static SerialPort SR = new SerialPort();
public Form1()
{
InitializeComponent();
}
// ที่ Comment เพราะค่า Default มันเป็นค่านี้อยู่แล้วครับ ผมแค่ใส่ไว้ให้รู้ว่าพวกนี้เป็น property พื้นฐานที่ใช้ครับ
private void Form1_Load(object sender, EventArgs e)
{
btnConn.Text = "Connect";
btnSend.Text = "Send SMS";
// Set the appropriate properties.
SR.PortName = "COM7";
//SR.BaudRate = 9600;
//SR.Parity = Parity.None;
//SR.DataBits = 8;
//SR.StopBits = StopBits.One;
//SR.Handshake = Handshake.None;
// Set the read/write timeouts
//SR.ReadTimeout = 500;
//SR.WriteTimeout = 500;
SR.DataReceived+=new SerialDataReceivedEventHandler(SR_DataReceived);
}
private void SR_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
if (rtbRespond.InvokeRequired)
{
rtbRespond.Invoke(new MethodInvoker(delegate { rtbRespond.AppendText(indata); }));
}
else {
rtbRespond.AppendText(indata);
}
}
private void btnConn_Click(object sender, EventArgs e)
{
if (btnConn.Text == "Connect")
{
SR.Open();
if (SR.IsOpen)
{
btnConn.Text = "DisConnect";
}
}
else
{
SR.Close();
btnConn.Text = "Connect";
}
}
private void btnConn_Click_1(object sender, EventArgs e)
{
if (btnConn.Text == "Connect")
{
SR.Open();
if (SR.IsOpen)
{
btnConn.Text = "DisConnect";
}
}
else
{
SR.Close();
btnConn.Text = "Connect";
}
}
private void btnSend_Click(object sender, EventArgs e)
{
// Set to text mode
SR.Write("AT+CMGF=1\r");
// Enter destination number
SR.Write("AT+CMGS=\"08XXXXXXX\"\r");
// Send message
SR.Write("Hello World!" + (char)26);
}
}
}
Date :
2011-12-23 05:40:51
By :
kerb
ตอนนี้ลองทดลองตาม code ที่ให้มาแล้วนะคับ ผลคือรับ respound การติดต่อกับ module ได้แล้ว
ลองส่งข้อความแล้ว มีการตอบรับ OK นะคับ แต่ไม่ส่งข้อความออกไป เลยอยากถามว่าเป็นเหมือนกันรึป่าวคับ
Date :
2011-12-24 00:02:04
By :
sim300cz
เป็นเหมือนกันครับ ลืมไปเลย น่าจะต้องเพิ่ม command อะไรซักอย่างครับ ขอดูแปบนึงครับ
Date :
2011-12-24 14:09:50
By :
kerb
สรุปว่าเราต้องระบุ หมายเลขของ SMS Service Center ของเครือข่ายที่เราใช้ด้วยครับ
SMSC หรือ Short Message Service Center
โดยทั่วไปการส่งข้อความระหว่างมือถือนั้น เมื่อ user ส่งข้อความไปยังผู้รับ มือถือจะทำการส่งข้อความไปที่ SMSC SMSC ก็จะทำการเก็บข้อความไว้ก่อน แล้วจึงส่งต่อไปยังผู้รับเมื่อผู้รับอยู่ในสถานะที่จะรับข้อความได้
คร่าวๆประมาณนี้ครับ
SMS Center AIS = +66818110888
SMS Center DTAC = +66816110400
SMS Center True = +66891009120
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace SendSMS
{
public partial class Form1 : Form
{
// Create a new SerialPort object with default settings.
static SerialPort SR = new SerialPort();
public Form1()
{
InitializeComponent();
}
// ที่ Comment เพราะค่า Default มันเป็นค่านี้อยู่แล้วครับ ผมแค่ใส่ไว้ให้รู้ว่าพวกนี้เป็น property พื้นฐานที่ใช้ครับ
private void Form1_Load(object sender, EventArgs e)
{
btnConn.Text = "Connect";
btnSend.Text = "Send SMS";
// Set the appropriate properties.
SR.PortName = "COM7";
//SR.BaudRate = 9600;
//SR.Parity = Parity.None;
//SR.DataBits = 8;
//SR.StopBits = StopBits.One;
//SR.Handshake = Handshake.None;
// Set the read/write timeouts
//SR.ReadTimeout = 500;
//SR.WriteTimeout = 500;
SR.DataReceived+=new SerialDataReceivedEventHandler(SR_DataReceived);
}
private void SR_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
if (rtbRespond.InvokeRequired)
{
rtbRespond.Invoke(new MethodInvoker(delegate { rtbRespond.AppendText(indata); }));
}
else {
rtbRespond.AppendText(indata);
}
}
private void btnConn_Click(object sender, EventArgs e)
{
if (btnConn.Text == "Connect")
{
SR.Open();
if (SR.IsOpen)
{
btnConn.Text = "DisConnect";
}
}
else
{
SR.Close();
btnConn.Text = "Connect";
}
}
private void btnConn_Click_1(object sender, EventArgs e)
{
if (btnConn.Text == "Connect")
{
SR.Open();
if (SR.IsOpen)
{
btnConn.Text = "DisConnect";
}
}
else
{
SR.Close();
btnConn.Text = "Connect";
}
}
private void btnSend_Click(object sender, EventArgs e)
{
// Set to Text mode
SR.Write("AT+CMGF=1\r");
Thread.Sleep(500);
// Enter SMS Service Center number
SR.Write("AT+CSCA=\"+66891009120\"\r");
Thread.Sleep(500);
// Enter destination number
SR.Write("AT+CMGS=\"+668XXXXXXXX\"\r");
Thread.Sleep(500);
// Send message
SR.Write("Hello World!" + (char)26);
}
}
}
Date :
2011-12-24 15:54:53
By :
kerb
ขอบคุณมากคับ ได้แต่ความรู้ใหม่หมดเลย เด๋วขอไปลองก่อนนะคับ
Date :
2011-12-24 20:24:59
By :
sim300cz
ได้แล้วคับ ขอบคุณมากคับ แต่ขอถามหน่อยครับถ้ข้อความเป็นวันที่ปัจจุบัน หรืออีก 5 วันข้างหน้าต้องทำยังไงบ้างหรอคับ เดะผมจะไปทำเบอร์ให้สามารถกรอกเบอร์โทรผ่านทาง textbox ได้ด้วย ขอบคุณมากๆคับ
Date :
2011-12-25 21:40:01
By :
sim300cz
งงคำถามครับ คือยังไงครับ จะตั้งเวลาส่งหรอครับ
Date :
2011-12-25 23:21:41
By :
kerb
สมมติว่าวันนี้วันที่ 25/12/2011 ต้องการให้ตัว module ส่งข้อความว่า
>> วันที่ 30/12/2011 กรุณามาหาด้วย
ประมาณนี้น่ะคับคือให้นับวันจากปัจจุวันไปอีกตามที่เราต้องการได้
Date :
2011-12-26 01:01:45
By :
sim300cz
ใช่ตั้งเวลาส่งล่วงหน้ารึป่าวครับ ผม งงๆ
Date :
2011-12-29 22:14:20
By :
kerb
ไม่ใช่ครับ คือเหมือนส่ง message บอกวันเวลาน่ะคับ โดยเป็นการบอกวันเวลาล่วงหน้า ซึ่งในที่นี้ที่ยกตัวอย่างไปบอกเวลาล่วงหน้าเป็นเวลา 5 วันน่ะคับ
เช่นวันนี้คือวันที่ 30 ธันวาคม 2554 ใช่มั้ยครับ ต้องการให้ส่งข้อความบอกไปว่า
>>> มีนัดวันที่ 4 มกราคม 2555 ( ไทย / ENG ก็ได้ครับ)
ประมาณนี้น่ะครับ
Date :
2011-12-30 10:18:47
By :
sim300cz
not inserted เกิดจากอะไรคับ
Date :
2012-03-07 00:56:47
By :
tae
ซื้อ gsm module ได้จากที่ไหนครับ
Date :
2012-10-03 12:12:49
By :
casperx
ผมซื้อผ่าน ebay ครับ ถูกดี
Date :
2012-10-22 08:36:35
By :
kerb
Load balance : Server 04