ตัวควบคุม SMS ที่ใช้ SIM800L

ตัวควบคุม SMS ที่ใช้ SIM800L

SIM800L V2.0 GSM/GPRS เป็นโมดูล GSM/GPRS แบบควอดแบนด์ที่เข้ากันได้กับ Arduino โมดูลนี้ใช้เพื่อใช้ฟังก์ชัน GSM (การโทรและ SMS) และ GPRS ข้อดีของโมดูลนี้คืออินเทอร์เฟซ TTL ซึ่งมีแรงดันไฟฟ้า 5V ซึ่งช่วยให้คุณสามารถเชื่อมต่อโดยตรงกับ Arduino หรือระบบอื่น ๆ ที่มีแรงดันไฟฟ้า 5V โมดูล GSM/GPRS ส่วนใหญ่ในตลาดจำเป็นต้องมีการเชื่อมต่อตัวควบคุมหรือการแปลงระดับ ในขณะที่ SIM800L V.2 GSM/GPRS ไม่ต้องการวงจรการแปลงระดับอินเทอร์เฟซเพิ่มเติม

มาดูตัวอย่างโครงการที่ใช้ SIM800L V.2 GSM/GPRS กัน จุดประสงค์ของโครงการคือการควบคุมสวิตช์โดยใช้ตัวควบคุม SMS คุณสามารถเปิดและปิดเครื่องใช้ในครัวเรือนส่วนใหญ่ในบ้าน เช่น ลามะ พัดลม และอื่นๆ ได้อย่างง่ายดาย

ลักษณะของโมดูล SIM800L V.2 GSM/GPRS


ด้านล่างนี้เป็นคุณลักษณะทางเทคนิคทั้งหมดของโมดูล GSM/GPRS SIM800L V.2:
  • อินเทอร์เฟซแบบอนุกรม TTL เข้ากันได้กับไมโครคอนโทรลเลอร์ Arduino 3.3V และ 5V
  • โมดูล SIM800L มีอินเทอร์เฟซแบบอนุกรม TTL
  • ปลั๊กเชื่อมต่อเสาอากาศ
  • รองรับเครือข่าย: สี่แบนด์ 850/900/1800/1900 MHz สามารถโทรออก SMS และถ่ายโอนข้อมูลโดยสิ้นเปลืองแบตเตอรี่ลดลงอย่างมาก
  • อินเทอร์เฟซ VDD TTL UART เพื่อให้คุณสามารถเชื่อมต่อ MCU เช่น 51MCU, ARM หรือ MSP430 ได้โดยตรงปลั๊ก VDD ใช้เพื่อจับคู่แรงดันไฟฟ้า TTL
  • รุ่น: SIMCOM SIM800L
  • แรงดันไฟฟ้า: จาก 3.7V ถึง 5V;
  • ขนาด: 40มม.x 28มม.x 3มม
  • GPRS multislot คลาส 12/10
  • บริการแพ็คเก็ต GPRS คลาส B
  • สอดคล้องกับ GSM เฟส 2/2+
  • คลาส 4 (2 วัตต์ @ 850/900 MHz)
  • คลาส 1 (1 วัตต์ @ 1800/1900MHz)


วัสดุที่จำเป็น


ตัวควบคุม SMS ที่ใช้ SIM800L


คุณจะต้องการ:


1. SIM800L V.2 โมดูล GSM/GPRS.
2. อาร์ดูโน่ อูโน่.
3. โมดูลรีเลย์ 4 ช่อง 5V.
4. สายไฟ - จัมเปอร์.
5. แหล่งจ่ายไฟ 5V.
(ลิงก์ที่ใช้งานไปยังร้านค้าสำหรับการซื้อ)

การประกอบและการกำหนดค่า


ตัวควบคุม SMS ที่ใช้ SIM800L


เมื่อคุณเชื่อมต่อส่วนประกอบทั้งหมดแล้ว ให้สร้างโปรแกรมแล้วอัปโหลดไปยัง Arduino ของคุณ แต่ก่อนอื่น คุณต้องติดตั้งไลบรารี GPRS ซึ่งคุณสามารถดาวน์โหลดได้:

gprs.zip [28.02 Kb] (ดาวน์โหลด: 887)


รหัสโปรแกรมสำหรับ Arduino


ตัวควบคุม SMS ที่ใช้ SIM800L


เมื่อคุณเชื่อมต่อ SIM800L ซึ่งเป็นโมดูลรีเลย์ 4 ช่องสัญญาณและ Arduino เข้ากับคอมพิวเตอร์แล้ว ให้ป้อนรหัสด้านล่าง เท่านี้ก็เสร็จสิ้น



#รวม 

#รวม

#กำหนดหมดเวลา 5,000

#กำหนดแอคทีฟต่ำ

#กำหนดปิดสูง



ไบต์รีเลย์ [] = {A0, A1, A2, A3};

ไบต์ StatRelay [4];

ถ่านบัฟหมายเลข [20];

ถ่าน currentLine[500] = "";

int currentLineIndex = 0;

บูล nextLineIsMessage = false;

สตริง ReplyNumber = "089510863958";

GPRS GPRS;



การตั้งค่าเป็นโมฆะ () {

สำหรับ (int i = 0; i <4; i ++) {

pinMode(รีเลย์[i] , เอาต์พุต);

digitalWrite (รีเลย์ [i], MATI);

StatRelay[i] = MATI;

-



อนุกรมเริ่มต้น(9600);

ในขณะที่(!อนุกรม);

Serial.println("เปิดใช้งาน SIM800L V2 >>> อ่าน SMS อัตโนมัติ");

gprs.preInit();

ล่าช้า (1,000);

ในขณะที่ (0 != gprs.init()) {

ล่าช้า (1,000);

Serial.print("ข้อผิดพลาดเริ่มต้น");

-



// จัดการข้อความไปยังโหมด ASCII

ถ้า (0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1rn", "ตกลง", หมดเวลา)) {

ข้อผิดพลาด("ข้อผิดพลาด:CNMI");

กลับ;

-

// อ่าน SMS ที่เข้ามา

ถ้า (0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0rn", "ตกลง", หมดเวลา)) {

ข้อผิดพลาด("ข้อผิดพลาด:CNMI");

กลับ;

-

int pjg = ReplyNumber.ความยาว() + 1;

บัฟนัมเบอร์ [pjg];

ReplyNumber.toCharArray(บัฟนัมเบอร์,pjg);

Serial.print("ส่งคำตอบไปที่หมายเลข => ");

Serial.println(บัฟนัมเบอร์);

Serial.println("การเริ่มต้นเสร็จสิ้น");

Serial.println("============================================= =============== ================");

-



เป็นโมฆะวน() {

// เปลี่ยนสถานะ เปิด/ปิด รีเลย์

สำหรับ (int i = 0; i <4; i ++) {

digitalWrite (รีเลย์ [i], StatRelay [i]);

-



// หากมีข้อมูลเข้าจาก SIM800

ถ้า (gprs.serialSIM800.available()) {

ถ่าน LastCharRead = gprs.serialSIM800.read();



// บันทึกข้อมูลทั้งหมดใน LastCharRead หากมี r หรือ n เพื่อเป็นสัญญาณสุดท้ายของข้อความขาเข้า

ถ้า (lastCharRead == 'r' || LastCharRead == 'n') {

สตริง LastLine = สตริง (currentLine);



// หากข้อความสุดท้าย +CMT ระบุว่ามีข้อความใหม่มาถึง

ถ้า (lastLine.startsWith("+CMT:")) {

Serial.println(บรรทัดสุดท้าย);

nextLineIsMessage = จริง;

} อื่นถ้า (lastLine.length() > 0) {

ถ้า (nextLineIsMessage) {

Serial.println(บรรทัดสุดท้าย);



// ================================================ ==== ================>> ฟังก์ชั่นของ Relay Controller



// รีเลย์ 1 คอนโทรลเลอร์



ถ้า (lastLine.indexOf ("รีเลย์ 1 เปิด") >= 0) {

สเตตรีเลย์[0] = AKTIF;

Serial.print("ตอบกลับ====>>>> ");

Serial.println("สถานะรีเลย์ 1 ทำงานอยู่");

gprs.sendSMS (buffNumber, "สถานะรีเลย์ 1 ทำงานอยู่");

-



อื่นถ้า (lastLine.indexOf("รีเลย์ 1 ปิด") >= 0) {

StatRelay[0] = มาติ;

Serial.print("ตอบกลับ====>>>> ");

Serial.println("สถานะรีเลย์ 1 ปิดอยู่");

gprs.sendSMS (buffNumber, "สถานะรีเลย์ 1 ปิดอยู่");

-



// รีเลย์ 2 คอนโทรลเลอร์



ถ้า (lastLine.indexOf ("รีเลย์ 2 เปิด") >= 0) {

StatRelay[1] = AKTIF;

Serial.print("ตอบกลับ====>>>> ");

Serial.println("สถานะรีเลย์ 2 ทำงานอยู่");

gprs.sendSMS (buffNumber, "สถานะรีเลย์ 2 ทำงานอยู่");

-

อื่นถ้า (lastLine.indexOf("รีเลย์ 2 ปิด") >= 0) {

StatRelay[1] = มาติ;

Serial.print("ตอบกลับ====>>>> ");

Serial.println("สถานะรีเลย์ 2 ปิดอยู่");

gprs.sendSMS (buffNumber, "สถานะรีเลย์ 2 ปิดอยู่");

-



// รีเลย์ 3 คอนโทรลเลอร์

ถ้า (lastLine.indexOf ("รีเลย์ 3 เปิด") >= 0) {

StatRelay[2] = AKTIF;

Serial.print("ตอบกลับ====>>>> ");

Serial.println("สถานะรีเลย์ 3 ทำงานอยู่");

gprs.sendSMS (buffNumber, "สถานะรีเลย์ 3 ทำงานอยู่");

-

อื่นถ้า (lastLine.indexOf("รีเลย์ 3 ปิด") >= 0) {

StatRelay[2] = มาติ;

Serial.print("ตอบกลับ====>>>> ");

Serial.println("สถานะรีเลย์ 3 ปิดอยู่");

gprs.sendSMS (buffNumber, "สถานะรีเลย์ 3 ปิดอยู่");

-



// รีเลย์ 4 คอนโทรลเลอร์

ถ้า (lastLine.indexOf ("รีเลย์ 4 เปิด") >= 0) {

StatRelay[3] = AKTIF;

Serial.print("ตอบกลับ====>>>> ");

Serial.println("สถานะรีเลย์ 4 ทำงานอยู่");

gprs.sendSMS (buffNumber, "สถานะรีเลย์ 1 ทำงานอยู่");

-

อื่นถ้า (lastLine.indexOf("รีเลย์ 4 ปิด") >= 0) {

StatRelay[3] = มาติ;

Serial.print("ตอบกลับ====>>>> ");

Serial.println("สถานะรีเลย์ 4 ปิดอยู่");

gprs.sendSMS (buffNumber, "สถานะรีเลย์ 4 ปิดอยู่");

-

nextLineIsMessage = เท็จ;

-



// ================================================ ==== ===================>>



-

//ล้างอาร์เรย์ถ่านเพื่ออ่านบรรทัดถัดไป

สำหรับ (int i = 0; i < sizeof (currentLine); ++ i ) {

currentLine[i] = (ถ่าน)0;

-

currentLineIndex = 0;

-

อื่น {

currentLine[currentLineIndex++] = LastCharRead;

-

-

-



ตรวจสอบอุปกรณ์


ตัวควบคุม SMS ที่ใช้ SIM800L


เครื่องมือนี้ทำงานโดยส่ง SMS ไปที่ SIM800L พร้อมลำดับอักขระเฉพาะ ตัวอย่างเช่น หากต้องการเปิดรีเลย์ 1 ให้ใช้คำสั่ง “เปิดรีเลย์ 1” และหากต้องการปิด ให้ใช้คำสั่ง “ปิดรีเลย์ 1” สำหรับรีเลย์ที่เหลือ คำสั่งจะเกือบจะเหมือนกัน ยกเว้นหมายเลขลำดับของรีเลย์แต่ละตัวที่คุณต้องการควบคุม หลังจากส่งข้อความอัตโนมัติแล้ว SIM800 จะส่งการตอบกลับในรูปแบบข้อความเกี่ยวกับสถานะของซิมการ์ดแต่ละอัน

วิดีโอการประกอบ การกำหนดค่า และการทดสอบอุปกรณ์



บทความต้นฉบับเป็นภาษาอังกฤษ
ความคิดเห็น
  • หูกระต่ายรอยยิ้มหัวเราะบลัชออนยิ้มผ่อนคลายผ่อนคลายยิ้มแย้มแจ่มใส
    heart_eyesจูบ_หัวใจจูบ_ปิด_ตาแดงโล่งใจพอใจยิ้ม
    ขยิบตาStuck_out_tongue_winking_eyeStuck_out_tongue_closed_eyesยิ้มจูบStuck_out_tongueนอนหลับ
    กังวลหน้าบึ้งปวดร้าวอ้าปากทำหน้าบูดบึ้งสับสนเงียบ
    ไร้การแสดงออกไม่ขบขันเหงื่อ_ยิ้มเหงื่อผิดหวัง_โล่งใจเบื่อหน่ายเฉยๆ
    ที่ผิดหวังสับสนน่ากลัวหนาว_เหงื่ออดทนร้องไห้ร้องไห้
    ความสุขประหลาดใจกรีดร้องเหนื่อย_หน้าโกรธความโกรธชัยชนะ
    ง่วงนอนยำหน้ากากแว่นกันแดดเวียนหัว_หน้าภูตผีปีศาจsmile_imp
    neutral_faceno_mouthผู้บริสุทธิ์
3+สาม=
ความคิดเห็น (4)
  1. คิๆ
    #1 คิๆ แขก 26 สิงหาคม 2560 23:50 น
    0
    ว้าว! อย่างที่พวกเขาพูดกันว่าทุกสิ่งที่ชาญฉลาดนั้นเรียบง่าย ฉันไม่ต้องซื้ออะไรเลยบางทีทุกคนอาจมีขยะแบบนี้อยู่ที่บ้าน
  2. อเล็กซี่
    #2 อเล็กซี่ แขก 16 ธันวาคม 2560 16:53 น
    0
    ไม่ทำงาน, ไม่เป็นผล. เมื่อทำการคอมไพล์ จะมีข้อความว่า "Arduino: 1.8.5 Hourly Build 2017/08/28 06:33 (Windows 7), Board:"Arduino/Genuino Uno"
    1. เดนิส
      #3 เดนิส แขก 17 ธันวาคม 2560 08:11 น
      0
      คุณต้องใช้เส้นทางที่ไม่มีตัวอักษรภาษารัสเซียไปยังโปรเจ็กต์
  3. อันเดรย์
    #4 อันเดรย์ แขก 10 กุมภาพันธ์ 2562 11:54 น
    2
    มีข้อผิดพลาดมากมายในแบบร่าง มันจะไม่ทำงาน