• GSM modem SIM900 deneyimi. AVR ile GSM modül kontrolü

    Uzun bir süre çalışmanın inceliklerini aydınlattıktan sonra GSM modülü SIM900D, güvenlik sistemini güvenlik sistemiyle birleştiren ilk çalışma projesini duyurdu. uzaktan kumanda. Kısaca cihaz, hırsız alarmı durumunda bilgilendirme SMS'i gönderebiliyor, odanın ses kontrolünü etkinleştirmek için çağrı yapabiliyor, sıcaklığı takip edip istek üzerine SMS ile gönderebiliyor, ayrıca SMS yoluyla gönderilen komutla bazı yükleri kontrol edebiliyor. .

    Bu konuyu takip edenler bilirler ki bende bir GSM modülü ve bunun için bir de kontrol modülü var - iki farklı panolar, bir sandviçle bağlanır (SIM900D'li panoya ve kontrol panosuna bakın). Kontrol kartı üzerinde ATmega32a mikrodenetleyiciye ek olarak LM2596 dönüştürücü üzerine yapılmış bir güç modülü bulunmaktadır, devreye güç verir sabit voltaj 3,5 volt. Prensip olarak, başka herhangi bir güç kaynağı işini görecektir, asıl önemli olan kısa bir süre için 2 ampere kadar çekebilmesidir (bu, kayıt sırasındaki GSM modülünün tüketiminin tam olarak karşılığıdır).

    Kolaylık sağlamak amacıyla, kontrol paneline Nokia3310 telefonunun bir ekranı bağlanır; çalışma yöntemleri bu sitede zaten birden fazla kez açıklanmıştır. Ekran sayesinde cihazın durumunu ve sensörlerin değerini hızlı bir şekilde belirleyebilirsiniz.

    Sonuç olarak, ortaya çıkan bağlantı şeması şu şekilde ortaya çıktı (tıklanabilir):

    Diyagramdaki mikrodenetleyicinin pin numaralandırması DIP paketi için verilmiştir, dolayısıyla TQFP paketindeki mikrodenetleyicileri kullanarak devreyi tekrarlarsanız dikkatli olun, pin numaralandırması farklıdır. Mikrokontrolör harici bir kuvarstan 16 MHz'de saat hızına sahiptir.

    Astar kontrol Q2 transistörünün toplayıcısından mikro denetleyicinin PortD.4 pinine giden yol reasürans için eklenir ve modülün açık olup olmadığını izlemek için gereklidir. SIM900 için kapatma eşiği 3,2 volt olduğundan, hafif bir voltaj düşüşünde bile modül otomatik olarak kapanacak ve mikro denetleyici çalışmaya ve programı yürütmeye devam edecektir (ATmega32a için sıfırlama eşiği 2,7 volttur). Bu hatta çalışır durumda düşük seviye. Mikrodenetleyici bu hattın yüksek olduğunu tespit ederse fonksiyon çalıştırılacaktır. tekrar başlat GSM modülü.

    Ve şu anda işyerinde durum böyle görünüyor.

    Programın son olarak ele geçirilmesinden sonra, tüm bunlar kasaya yerleştirilecek ve çıkarılabilir bağlantılar güvenilirlik için lehimlenecektir.

    Ekranda cihazın durumuyla ilgili temel bilgiler görüntülenir: operatörün adı, iletişim sinyalinin kalitesi, 18b20 sensöründen gelen sıcaklık değeri, yük çıkışı ve izinsiz giriş sensörünün durumu, ayrıca zaman ve saat tarih.

    Modülün açılmasını gösteren video

    Saat ve tarih GSM modülündeki yerleşik saatten alınır. Çalışmaları için pin 15'e (VRTC) bağlı 3 voltluk bir pil gereklidir. Diyot D1'in Schottky gibi düşük voltaj düşüşüne ayarlanması önerilir. Saat ve tarihin ayarlanması manuel olarak yapılır; komutlar daha önce açıklanmıştı

    Tarih, modülden alınan formatta, yani önce yıl, sonra ay ve tarih olarak ekranda görüntülenir. Şu ana kadar burada hiçbir şey değişmedi.

    DS18B20 sensörü sıcaklığın ölçülmesinden sorumludur; mikro denetleyicinin PortD.3 pinine bağlanır.

    PortD.6'ya dilediğiniz yükü bağlayabilir ve SMS komutlarıyla kontrol edebilirsiniz. Artık şemada asılı bir LED var - D4. Ancak hiçbir şey sizi buraya bir röle veya triyak asmaktan ve daha ciddi bir şeyi yönetmekten alıkoyamaz.

    Güvenlik amacıyla E-bay üzerinden satın alınan HC-SR501 hareket sensörünün kullanılması planlanmaktadır. Tetikleme durumunda sensörün çıkışında bir mantıksal birim belirir. Mikrodenetleyici onu yakaladıktan sonra gönderme komutunu verecektir. SMS mesajlarıİle telefon numarası programda belirtilmiştir.

    Sensör çıkışı, mikro denetleyicinin PortD.7 çıkışına bağlanır, şemada sensörün yerini koşullu olarak bir düğme alır.

    Bir hareket sensörü yerine, penetrasyonu tespit etmek için başka herhangi bir araç koyabilirsiniz - pencere ve kapı açma sensörleri, cam kırılma sensörleri, fotoelektrik sensörler vb., genel olarak fantezinin yapabileceği her şey.

    Bir sensörün tetiklenmesi durumunda birden fazla uyarı SMS'i gönderilmesini önlemek amacıyla programa bir kısıtlama getirilmiştir: ilk gönderilen SMS'ten sonra sonraki gönderimlere yasak getirilmiştir. Sensör tetiklendiğinde bildirim mesajlarının gönderilmesini yeniden etkinleştirmek için modüle belirli bir komutla SMS göndermek gerekir. SMS göndermek yasak olduğunda sensör durumunun yanında bir ünlem işareti görüntülenecektir.

    Komut Listesi

    Ve işte modülün işlediği SMS komutlarının listesi. Kolaylık ve basitlik açısından komutlar dijitaldir, muhtemelen sonraki sürümler Firmware'in daha anlamlı komut isimleri olacak :)

    0 – Yükün kesilmesi (PortD.6 çıkışında lojik 0 ayarlanmıştır)

    1 – Yükü açın (Logic 1, PortD.6 çıkışında ayarlanır)

    2 – Bu komutu kabul ettikten sonra modül programda belirtilen telefon numarasını geri arayacaktır.

    3 – Bakiye talebinde bulunun ve belirtilen numaraya SMS ile geri gönderin. Burada bir tane var önemli nüans- e cevaplar USSD talepleri Latince olmalıdır. Aksi takdirde yanıt, anlamlı bir metin yerine onaltılık kodlamada bir mesaj alacaktır. USSD'yi Latince'ye nasıl çevireceğinizi operatörünüzle kontrol etmeniz gerekir. Örneğin Smarts'tan kullandığım SIM kartta *102*1# (megafonda *105*0#) girmeniz gerekiyor.

    4 – Sıcaklık talebi. Sıcaklık değeri tarafımıza SMS ile iletilecektir.

    5 – İzinsiz giriş sensörü tetiklendiğinde mesaj gönderilmesine izin verin.

    6 – İzinsiz giriş sensöründen bildirim SMS'i gönderilmesinin yasaklanması.

    ? - Bu komutla modül bize aşağıdakileri içeren bir SMS gönderecektir: Genel bilgi sıcaklık sensöründen gelen değer, yükün açık olup olmadığı, izinsiz giriş sensörü girişindeki durum ve bundan bildirim SMS'i gönderilmesine izin verilip verilmediği gibi cihaz hakkında. Örneğin böyle bir mesaj şu şekilde görünebilir: sıcaklık +24, yük kapalı, hareket sensörünün çıkışı 0, çalışma durumunda SMS göndermek yasaktır.

    Şimdi modülü numaranıza sms gönderecek şekilde nasıl yapılandıracağınız. Programın bulunduğu arşivde ana program dosyasını buluyoruz, buna “program” 🙂 adı veriliyor ve içindeki sabiti buluyoruz:

    İnşaat Telefon numarası = "+7908390хххх"

    telefon numaramızı buraya yazıyoruz, programı derliyoruz ve ürün yazılımı hex dosyasını alıyoruz.

    Program her zaman olduğu gibi Bascom-AVR'de yazılmıştır, bu nedenle GSM modülüyle çalışma algoritmasını anlamak oldukça kolaydır. İyi şanlar!

    Ve son olarak modülün komutları nasıl işlediğinin bir gösterimi.

    Geliştirmeye katılım ve yardım için özel teşekkürler, sitenin uzun süredir arkadaşı olan Sergey RD3AVJ!

    GÜNCELLEME: 31.10.12'den itibaren

    Ürün yazılımını biraz değiştirdim, artık bildirim SMS'inin gönderileceği numarayı ayarlamak için programı yeniden derlemenize gerek yok. Modüle mesaj ile SMS göndermeniz yeterlidir. “İlk numara”(tırnak işaretleri olmadan) ve bu komutun gönderildiği numara, mikro denetleyicinin kalıcı belleğine yazılır.

    İletişimin gerekli olduğu cihazlarda kullanılabilir uzun mesafeler. Örneğin Moskova'daki bir robot, Krasnodar'da oturan bir kişi tarafından kontrol ediliyor! Veya bir çiftçi, tarladan birkaç kilometre uzakta bulunan evinden pirinç tarlasındaki su pompasını çalıştırıyor! Cihazla iletişim kurmak için birkaç seçenek vardır:

    SMS mesajlarına dayalı basit iletişim:
    Basit SMS komutlarıyla cihazı açın/kapatın. Cihazı kontrol etmek için herhangi bir cep telefonu kullanılabilir.
    Sahibini bilgilendiren güvenlik / yangın alarmı acil durum SMS ile evde.

    Çağrıya dayalı iletişim:
    Polisi veya itfaiyecileri arayan ve önceden kaydedilmiş sesli mesajları kullanarak acil durumu bildiren akıllı hırsız/yangın alarmı.

    İnterneti kullanarak iletişim (GPRS):
    Kullanıcı, cihazı internete bağlı herhangi bir PC/tablet/cep telefonundan kontrol edebilir. Örneğin raylara yerleştirilen bilgi ekranları merkezi kontrol odasından kontrol ediliyor.
    İnternet kontrollü robot. Böyle bir robota dünyanın her yerinden internete bağlı herhangi bir cihazdan erişilebilir.
    Araçlara takılan, SIM300 GPRS modülünü kullanarak internete bağlanan ve mevcut konumu ekleyen (GPS (Küresel Konum Sistemi, Küresel Sistem Konumlandırma)) sunucuya. Bu veriler, araç kimliğiyle birlikte sunucudaki bir veritabanında saklanır. Arabanın rotasını görüntülemek için sunucuya bir bilgisayardan bağlanabilirsiniz. Dünya çapında Web (Dünya Çapında Ağ).

    SIM300 modülünü kullanmanın faydaları

    SIM300 Kiti tamamen bağımsız modül SIM kart yuvası, güç kaynağı vb. ile Bu modül ucuz AVR/PIC/8051 mikrodenetleyicilere kolaylıkla bağlanabilir. Mikrodenetleyici ile iletişim asenkron bir şekilde gerçekleştirilir. seri port. Bu, donanımdaki çoğu mikro denetleyici tarafından desteklenen temel seri iletişim türüdür. Veriler parça parça iletilir ve baytlara dönüştürülür. Açık yüksek seviye basit bir metin akışına benziyor. Toplamda iki akış vardır: biri mikro denetleyiciden SIM300'e, diğeri SIM300'den mikro denetleyiciye. Komutlar düz metin olarak gönderilir.

    Seri iletişimi hiç kullanmadıysanız veya duymadıysanız, nasıl çalıştığını anlayıp daha basit örneklerle pratik yapmak iyi bir fikirdir.

    AVR UART kullanarak SIM300 modülü ile iletişim

    Seri iletişim için kullanılan mikrodenetleyici donanımına UART denir ve bunu SIM300 modülü ile iletişim kurmak için kullanırız (RFID okuyucular gibi diğer cihazlarla iletişim kurmak için de kullanılabilir), GPS modülleri, parmak izi tarayıcıları vb.). UART elektronik dünyasında çok yaygın bir iletişim yöntemidir, bunun için UART kullanan tüm projelerimizde kullandığımız temiz ve basit bir kütüphane yazdık.

    SIM300'den bir bayt mikro denetleyiciye her an ulaşabildiğine göre, mikro denetleyici başka bir şeyle meşgulse ne olur? Bu sorunu çözmek için gelen verilerin ara belleğe alınmasını kesintilere dayalı olarak yaptık. Tampon içeride rasgele erişim belleği mikrodenetleyici. Kuyruktaki bayt sayısını belirlemenizi sağlayan bir işlevi vardır.

    AVR USART kütüphanesinin işlevleri aşağıdadır:

    void USARTInit(uint16_t ubrrvalue)

    AVR USART donanımının başlatılması. Parametre değeri ubrr değeriİstenilen veri hızı ayarlanır. SIM300 için varsayılan baud hızı 9600 bps'dir. İçin AVR mikrodenetleyici 16 MHz değerindeki frekansta çalışan ubrr değeri bu hız için olmalı 103 .

    char UReadData()

    Kuyruktan bir karakter okunuyor. Kuyrukta hiçbir şey yoksa cevap 0'dır.

    geçersiz UWriteData(karakter verileri)

    UWriteString() işlevini kullanarak Tx satırı başına bir bayt veri yazar.

    uint8_t UDataAvailable()

    FIFO kuyruğundaki veri miktarını bildirir.

    void UWriteString(char*str)

    Tx satırına boş sonlandırılmış C tarzı bir dize yazar.
    Örnek 1: UWriteString("Merhaba Dünya!");
    Örnek 2: charname = "Avinash!"; UWriteString(isim);

    void UReadBuffer(void *buff,uint16_t len)

    FIFO arabelleğinin içeriğini buff ile belirtilen belleğe kopyalar, kopyalanan veri miktarı len parametresi tarafından belirtilir. UART üzerinden FIFO buffer’a gereğinden az veri gelmişse (len parametresine göre) kalan alan sıfırlarla doldurulacaktır.

    char gsm_buffer;
    UReadBuffer(gsm_buffer,16);

    Yukarıdaki örnek, FIFO arabelleğinden 16 baytlık veriyi (varsa) bir değişkene okuyacaktır. gsm_buffer. dikkat gsm_buffer Daha sonra 16 bayttan fazlasına ihtiyaç duyabileceğimiz için 128 baytlık bir dizi ayrıldı. Böylece bu tampon 128 byte'a kadar daha sonra okumak için kullanılabilir.

    Yukarıda gösterilen işlev genellikle UDataAvailable() ile birlikte kullanılır.

    while(UDataAvailable()<16)
    {
    //Hiçbir şey yapma
    }

    char gsm_buffer;
    UReadBuffer(gsm_buffer,16);

    Yukarıda gösterilen kod parçacığı, arabellekte 16 baytlık verinin birikmesini bekler ve ardından bunları okur.

    geçersiz UFlushBuffer()

    FIFO verilerinin arabellek tarafından beklenmesini iptal eder. GSM modülüne yeni bir komut göndermeden önce, ilk olarak arabellek tarafından FIFO verilerinin beklenmesini iptal edin.

    Yukarıdaki işlevler SIM300 GSM modülünden metin komutları göndermek ve almak için kullanılır.

    SIM300 için AT komut seti

    Artık AVR USART kitaplığının temellerini ve USART'ı başlatmak, veri gönderip almak için kullanımını bildiğinize göre, SIM300 modülü komutlarını ve bunların nasıl gönderilip yanıt alınacağını öğrenmenin zamanı geldi. SIM300'ün çeşitli işlevleri vardır: kısa mesaj gönderme, arama yapma vb. Bu işlevlerin her biri belirli bir komuttan sonra gerçekleştirilir ve SIM300'ün kendi komut seti vardır.

    Tüm SIM300 komutları bir önekle başlar AT+ ve son Satırbaşı(satırbaşının kısaltması). CR için ASCII kodu 0x0D'dir (ondalık 13). SIM300'e göndereceğiniz tüm komutlar SIM300'ün TX hattına geri dönecektir. Yani, 7 baytlık bir komut gönderirseniz (son CR dahil), o zaman bu 7 baytı UART aracılığıyla hemen arabellekte alırsınız. Eğer almadıysanız, bu bir şeylerin yanlış olduğu anlamına gelir!

    İnceleyeceğimiz ilk fonksiyon SIM300Cmd(sabit karakter *cmd), aşağıdakileri yapar:

    • Parametrenin verdiği komutları yazar cmd.
    • ekler CR komuttan sonra.
    • Komutun geri dönmesini bekler ve zaman aşımından önce gelirse yanıt verir. SIM300_OK(sim300.h'de tanımlanan sabit). Geri dönüş için çok uzun süre bekledilerse ama dönüş olmadıysa, diye yanıtlıyor SIM300_TIMEOUT.

    Not: SIM300'e bağlı tüm işlevler sim300.c dosyasında saklanır. Örnekler ve sabitler sim300.h'de saklanır

    SIM300Cmd() ile çalışma

    Int8_t SIM300Cmd(const char *cmd) ( UWriteString(cmd); //Komut Gönder UWriteData(0x0D); //CR uint8_t len=strlen(cmd); len++; //Tüm komutlara eklenen CR'nin sonuna 1 ekleyin uint16_t i= 0; //Eko'yu bekleyin (i< 10*len) { if(UDataAvailable() < len) { i++; _delay_ms(10); continue; } else { //We got an echo //Now check it UReadBuffer(sim300_buffer,len); //Read serial Data return SIM300_OK; } } return SIM300_TIMEOUT; }

    Genellikle bir komutun ardından bir yanıt gelir. Yanıt formu şöyledir:
    LF- Satır Beslemesi, ASCII kodu 0x0A'dır (ondalık sistemde 10)

    Böylece, bir komut gönderdikten sonra yanıt beklerken üç şey meydana gelebilir:

    • Uzun süre yanıt gelmedi. Bunun olası nedeni SIM300'ün mikro denetleyiciye bağlı olmaması olabilir.
    • Yanıt alındı ​​ancak beklendiği gibi olmadı. Bunun nedeni seri hat arızası, yanlış ayarlanmış baud hızı veya yanlış frekansta çalışan bir mikro denetleyici olabilir.
    • Doğru cevap alındı.

    Örneğin, komut Ağ Kaydını Alın(Ağ kaydı) şu şekilde gerçekleştirilir: Komut Dizesi (Komut): " AT+CREG'de mi?"

    Cevap(Cevap): +CREG: , TAMAM

    Doğru cevabın 20 bayt olduğunu görüyorsunuz. Yani "AT + CREG?" komutunu gönderdikten sonra. 20 byte'ın alınmasını veya belli bir sürenin geçmesini beklemek gerekir. SIM300'ün arızalı olması durumunda donmayı önlemek için ikinci koşul karşılanır. Yani, bir yanıt için sonsuza kadar beklemek yerine, SIM300 çok uzun süre yanıt verirse bir hata atılacaktır (buna zaman aşımı denir)

    Doğru cevap alınırsa ağa kayıt hakkında bilgi edinmek için değişkeni analiz ederiz.

    Ağdaki mevcut kayıt durumuna bağlı olarak değer şöyle olabilir: 0 - Kayıtlı değil, şimdi SIM300 kaydolacak yeni bir operatör aramıyor. 1 - Ev ağında kayıtlı. 2 - Kayıtlı değil, şimdi SIM300 kayıt olacak yeni bir operatör arıyor. 3 - Kayıt reddedildi. 4 - Bilinmiyor. 5 - Kayıtlı, dolaşımda.

    SIM300GetNetStat() ile çalışma

    Int8_t SIM300GetNetStat() ( //Komutu Gönder SIM300Cmd("AT+CREG?"); //Şimdi yanıtı bekleyin uint16_t i=0; //doğru yanıt 20 bayt uzunluğundadır //O halde 20 bayt elde edene kadar bekleyin // buffer.while(i) içinde<10) { if(UDataAvailable()<20) { i++; _delay_ms(10); continue; } else { //We got a response that is 20 bytes long //Now check it UReadBuffer(sim300_buffer,20); //Read serial Data if(sim300_buffer=="1") return SIM300_NW_REGISTERED_HOME; else if(sim300_buffer=="2") return SIM300_NW_SEARCHING; else if(sim300_buffer=="5") return SIM300_NW_REGISTED_ROAMING; else return SIM300_NW_ERROR; } } //We waited so long but got no response //So tell caller that we timed out return SIM300_TIMEOUT; }

    Fonksiyon aynı şekilde uygulanır: int8_t SIM300IsSIMInserted()

    Başka bir yanıt türünde, yukarıdaki komutta olduğu gibi yanıtın tam boyutunu önceden bilmiyoruz. Örneğin, bu, operatör adının uzunluğunun önceden bilinmediği Servis Sağlayıcı Adını Al (Operatörün (sağlayıcı) adını alma) komutudur. MTS, Beeline vb. Olabilir. Bu sorunu çözmek için yanıttan önce ve sonra olduğu gerçeğini kullanırız. CR LF. Böylece, buluşana kadar tüm karakterleri ara belleğe yazıyoruz. CR, bu da yanıtın sonu anlamına gelir.

    Bu tür komutların işlenmesini basitleştirmek için bir işlev yaptık
    SIM300WaitForResponse (uint16_t zaman aşımı)

    Bu işlev SIM300'den bir yanıt bekler (yanıtın sonu CR ile gösterilir) ve yanıtın kendisi global bir değişkene kopyalanırken yanıtın boyutunu bildirir sim300_buffer.

    Zaman aşımı süresinden önce yanıt alınamazsa yanıt 0 olur. Zaman aşımı süresi milisaniye cinsinden parametre ile ayarlanabilir. zaman aşımı. Geç LF'leri veya son OK'leri saymaz, UART FIFO arabelleğinde kalırlar. Yani geri dönmeden önce şu komutu kullanıyoruz: UFlushBuffer() bunları panodan kaldırmak için.

    SIM300WaitForResponse ile çalışma (uint16_t zaman aşımı)

    Int8_t SIM300WaitForResponse(uint16_t timeout) ( uint8_t i=0; uint16_t n=0; while(1) ( while (UDataAvailable()==0 && n

    SIM300GetProviderName (char *name) ile çalışmaİşlev şunları yapar:

    1. Hataları veya yanıtları kaldırmak için USART arabelleğini temizler.
    2. "AT + CSPN?" komutunu gönderiyor SIM300Cmd işlevinin kullanılması ("AT + CSPN?");
    3. Daha sonra SIM300WaitForResponse() işlevini kullanarak bir yanıt bekler.
    4. Eğer boş olmayan bir yanıt alırsak, operatörün adını almak için onu ayrıştırır.

    Aşağıdaki işlevler bu şekilde uygulanır:

    • uint8_t SIM300GetProviderName(karakter *ad)
    • int8_t SIM300GetIMEI(char *emei)
    • int8_t SIM300GetManufacturer(char *man_id)
    • int8_t SIM300GetModel(char *model)
    uint8_t SIM300GetProviderName(char *name) ( UFlushBuffer(); //Komutu gönder SIM300Cmd("AT+CSPN?"); uint8_t len=SIM300WaitForResponse(1000); if(len==0) return SIM300_TIMEOUT; char *start,*end ; start=strchr(sim300_buffer,"""); start++; end=strchr(start,"""); *end="\0"; strcpy(name,start); return strlen(name); )

    SIM300 ve ATmega32. Donanım

    AVR ATmega32'yi kullanarak SIM300 ile iletişimi göstermek için aşağıdaki bileşenlere ihtiyacımız var:
    - ATmega32, bağlama - sıfırlama kaydı, ISP pinleri, 16 MHz kuvars.
    - ATmega32 ve LCD ekrana güç sağlamak için +5V kaynak.
    - sonuçların gösterilmesi için 16x2 karakterli LCD ekran.
    - SIM300 modülü.

    ATmega32 kablolu, +5V beslemeli ve LCD ekrana sahip olduğundan Xboard hata ayıklama kartını kullandık.

    AVR ve SIM300 için demo kaynak kodu

    Demo kaynak kodu C dilinde yazılmış ve ücretsiz AVR-GCC derleyicisi kullanılarak en son sürüm kullanılarak derlenmiştir. Proje aşağıdaki modüllere ayrılmıştır:

    • LCD Kütüphanesi
      - lcd.c, lcd.h, myutils.h,custom_char.h dosyaları
      - Görevi standart 16x2 LCD'yi kontrol etmektir.
      - Daha fazla bilgiye bağlantıdan ulaşabilirsiniz.
    • USART Kütüphanesi
      - usart.c, usart.h dosyaları
      - Görevi, AVR mikro denetleyicisinin donanım USART'ını kontrol etmektir. USART başlatma, karakter gönderme/alma, dize gönderme/alma işlevlerini içerir.
    • SIM300 kütüphanesi
      - sim300.c, sim300.h dosyaları

    AS6 proje kurulumu adım adım

    "Sim300Demo" adında yeni bir AS6 projesi oluşturun.
    Çözüm gezginini (proje ağacı) kullanarak mevcut klasörde "lib" adında bir klasör oluşturun.
    "Lib" klasörünün içinde "LCD", "USART" ve "SIM300" klasörlerini oluşturun.
    LCD.c, lcd.h, myutils.h,custom_char.h dosyalarını (Windows Gezgini'ni kullanarak) lcd klasörüne kopyalayın.
    Usart.c, usart.h dosyalarını (Windows Gezgini'ni kullanarak) USART klasörüne kopyalayın
    Sim300.c, sim300.h dosyalarını (Windows Gezgini'ni kullanarak) SIM300 klasörüne kopyalayın.
    Çözüm gezginini (proje ağacı) kullanarak projeye lcd.c, lcd.h, myutils.h,custom_char.h dosyalarını ekleyin.
    Çözüm gezginini (proje ağacı) kullanarak projeye filesusart.c, usart.h ekleyin.
    Çözüm gezginini (proje ağacı) kullanarak sim300.c, sim300.h dosyalarını projeye ekleyin.
    AS6'yı kullanarak F_CPU = 16000000 değerini belirleyin.
    Ana Sim300Demo.c dosyasını kopyalayıp programa yapıştırın.
    Bir hex dosyası almak için projeyi derleyin.
    Xboard'unuzu bir USB programlayıcıyla flaşlayın.
    Yeni bir ATmega32 mikrodenetleyici kullanıyorsanız, DÜŞÜK SİGORTA'yı şu şekilde ayarlayın: 0xFF ve YÜKSEK SİGORTA açık 0xC9.

    Demo programı ne işe yarar?

    LCD'yi ve SIM300 modülünü başlatır.
    SIM300 modülünün USART'a bağlı olduğunu ve düzgün yanıt verdiğini doğrular.
    SIM300 modülünün IMEI'sini görüntüler.
    Üretici kimliğini görüntüler
    SIM kartın varlığını kontrol eder.
    GSM şebekesini arar ve bağlantı kurar. Bunu yapmak için aktif bir SIM kartınızın olması gerekir.
    Operatörün MTS veya Megafon gibi adını gösterir.

    Olası sorunlar

    LCD'de görüntü yok

    AVR Studio projenizin 16MHz saate (16000000Hz) ayarlandığından emin olun
    Potansiyometre ile kontrastı ayarlayın.
    Sıfırlama düğmesine birkaç kez basın.
    Cihazı birkaç kez açıp kapatın.
    LCD'yi yalnızca şemada gösterildiği gibi bağlayın.

    SIM300 başlatılırken "Yanıt Yok" hatası görünüyor

    SIM300 ile Xboard arasındaki Rx, Tx ve GND hatlarının bütünlüğünü kontrol edin.
    Mikrodenetleyicinin 16 MHz'de çalıştığından emin olun.
    Sigortaları tam olarak yukarıda anlatıldığı gibi takın.

    Derleyici hataları

    Birçok kişi önceden yazılmış ve derlenmiş programları kullanır. Hiçbir deneyimleri yok ve programlama ve derlemenin temellerine aşina değiller. Derleyicilere ve bunların farklı platformlarda (PC/MAC/Linux) nasıl çalıştıklarına aşina olmak harika bir başlangıç ​​olacaktır. Gömülü sistemler temel bilgileri öğrenmeye uygun değildir. Bu becerilere sahip olan ve bunları yalnızca kullananlar için tasarlanmıştır.
    Tüm LCD kütüphane dosyalarının projeye eklendiğinden emin olun.
    AVR-GCC'nin kurulu olduğundan emin olun. (Windows dağıtımına WinAVR denir)
    AVR Studio projesinde AVR GCC'nin belirtildiğinden emin olun.

    Yeni başlayanlar için genel tavsiyeler

    Hazır hata ayıklama panolarını ve programlayıcılarını kullanın.
    Makalelere ve ders kitaplarına dayanarak çalışmaya çalışın.

    Radyo elemanlarının listesi

    Tanım Tip Mezhep Miktar NotMağazanot defterim
    U1 MK AVR 8 bit

    ATmega32

    1 Not defterine
    U2 Lineer Regülatör

    LM7805

    1 Not defterine
    D1 doğrultucu diyot

    1N4007

    1 Not defterine
    D2 Işık yayan diyot 1 Not defterine
    C1, C2 Kapasitör22pF2 Not defterine
    C3, C4, C6 Kapasitör0,1uF3

    Aşağıda açıklanan SIM900'ü kullanma deneyimi, modülle zaten biraz çalışmayı başarmış olanlar için daha faydalı olacaktır. Bu mikro devreyi yeni incelemeye başlayan ve onu İnternet üzerinden veri alışverişi yapmak için kullanmayı planlayan okuyucular için bu konuyla ilgili bir dizi ders hazırladık. Burada .

    Dolayısıyla SIM900, AT komutları tarafından kontrol edilen, SMS gönderebilen, arama yapabilen, doğrudan CSD bağlantısı düzenleyebilen ve GPRS aracılığıyla bilgi alışverişi yapabilen SIM COM'dan bir GSM modülüdür.

    Elimde Çin'den sipariş edilen, Arduino platformuyla uyumlu SIM900 GPRS kalkan hata ayıklama kartı vardı.

    Kartta SIM900 yongasının kendisi, mikrofon ve kulaklık jakları, bir güç kaynağı anahtarı (harici bir konektörden veya Arduino'dan), bir anten, çalışma modlarını gösteren birkaç LED, bir pil konektörü (gerçek zamanlı bir saate ihtiyacınız varsa) bulunur. bir açma/kapama düğmesi. Üreticinin wiki'sinde iyi bir açıklama buldum . Modemi çeşitli modlarda kontrol etmek için bir kod da vardır.

    Üreticiye göre kart Arduino Uno ile mükemmel bir şekilde uyumlu. Aslında SIM900 kartı Uno'ya kolayca takılır ve hemen çalışmaya başlar. Ancak ortaya çıktığı gibi, Arduino Uno bazı işlevleri uygulama konusunda "zayıf" olabilir, ancak bundan biraz sonra bahsedeceğim.

    Kart Arduino Mega ile bazı sınırlamalarla çalışmaktadır. Bunun nedeni Mega'nın, Uno'dan farklı olarak pin 7 ve 8'in seri yazılım (USART yazılımı) olarak kullanılamamasıdır. Bu, USART arayüzünün 0 ve 1 numaralı bacaklara geçirilmesiyle çözülür; bunun için SIM900 kartında atlama telleri bulunur.

    Genel olarak kart, USART arayüzüne sahip herhangi bir kontrol cihazına bağlanabilir. Mesela modemi STM32F4 kumandasını kullanarak kontrol etmeye çalıştım.

    SIM900: SMS mesajları ve çağrılar

    SMS mesajları ve çağrı alışverişi için modülün testleri "patlamayla" geçti! Modül bu görevlerle sorunsuz bir şekilde başa çıktı, bunun için sadece c'yi kopyaladım aynı site, bu kodu derleyip Arduino Uno'ya aktardı:

    //Seri Röle - Arduino, bilgisayar ile GPRS Kalkanı arasında bir //seri bağlantı kuracaktır //19200 bps'de 8-N-1 //Bilgisayar UART Donanımına bağlanır //GPRS Kalkanı UART Yazılımına bağlanır #include YazılımSeri GPRS(7, 8); imzasız karakter arabelleği; // seri port üzerinden veri alımı için tampon dizisi int count=0; // tampon dizisi sayacı void setup() ( GPRS.begin(19200); // GPRS baud hızı Serial.begin(19200); // Arduino baud hızının seri portu. ) void loop() ( if (GPRS) .available()) // tarih yazılım seri portundan geliyorsa ==> veri gprs kalkanından geliyor ( while(GPRS.available()) // veri karakter dizisine okunuyor ( buffer=GPRS.read(); // diziye veri yazılıyor if(count == 64)break; ) Serial.write(buffer,count); // veri iletimi bitmezse, donanım seri portuna tampon yazın clearBufferArray(); // depolanan veriyi temizlemek için clearBufferArray fonksiyonunu çağırın diziden gelen veriler count = 0; // while döngüsünün sayacını sıfıra ayarlayın ) if (Serial.available()) // donanım seri portunda veri mevcutsa ==> veri PC veya notebook'tan geliyor GPRS.write(Serial .read()); // bunu GPRS kalkanına yazın ) void clearBufferArray() // arabellek dizisini temizleme işlevi ( for (int i=0; i)

    Modüle komut gönderebilmek için bilgisayara bağlı olması gerekmektedir. Bu, Arduino USB bağlantı noktası kullanılarak yapılabilir. Bir bilgisayarda bu, herhangi bir COM bağlantı noktası izleyicisini gerektirir. İndirilebilir buradan veya Arduino IDE'de yerleşik monitörü kullanabilirsiniz.

    Arduino programının yaptığı tek şey, kullanıcının komutlarını "yakalamak" ve bunları modüle göndermek ve ardından SIM900 yanıtlarını kullanıcıya geri göndermektir. Böylelikle manuel modda modüle AT komutları göndererek, SMS mesajları almayı ve iletmeyi test ettim ve uygun konektörlere mikrofon ve kulaklık bağlayarak SIM900 modülünü cep telefonu olarak kullandım.

    SIM900 kullanarak GPRS üzerinden veri aktarımı

    SIM900'ü kontrol etmek için Arduino UNO platformunu kullanarak GPRS üzerinden veri aktarımı konusundaki ilk deneylerime başladım (sadece elimde olduğu için). Başlangıç ​​​​olarak, Apache altında bir sunucuyla barındırma satın aldım ve üzerine GET isteklerine ustaca yanıt verebilecek basit bir uygulama yerleştirdim. Olmuş! Hala PC'den Arduino denetleyicisine komutlar gönderdim ve o da bunları SIM900'e iletti.

    GET istekleri yeterince kısa olduğu sürece (100 karaktere kadar) her şey düzgün çalıştı. Ancak talepler uzadıkça başarısızlıklar başladı: talepler tam olarak iletilmedi. Arduino kontrol programını birkaç satır artırıp/azalttığınızda bile aksaklıkların ortaya çıkabileceği veya kaybolabileceği gözlemlenmiştir. Daha sonra arızaların Arduino UNO'nun SIM900 ile iletişim kurmak için kullandığı USART yazılımıyla ilgili olduğu ortaya çıktı. böyle bir USART tamamen denetleyici çekirdek program döngüsüne bağlıdır. Az miktarda veriyle her zaman iletilecek zamanları vardır ve miktarlarının artmasıyla aktarımın sonucu program döngüsünün süresine bağlıdır.

    Yukarıdakilerin hepsinden çıkan sonuç, özellikle büyük miktarda iletilen veri söz konusu olduğunda, SIM900 ile iletişim kurarken USART yazılımını kullanmanın MÜMKÜN olmadığıdır.

    Arduino Uno'da, PC ile değişim tarafından kullanılan yalnızca bir "demir" USART arayüzü var, bu yüzden UNO'yu terk etmek zorunda kaldım ve onu "demir" USART eksikliğinden muzdarip olmayan Arduino Mega ile değiştirdim. Böyle bir "rok" sonrasında cihazın çalışması stabil ve doğru hale geldi.

    SIM900: TCP-IP yığını mı yoksa HTTP mi? Ne daha iyi?

    Modem yönetimi kılavuzunu incelerken iki grup AT komutunun olduğunu buldum. İlk grup, verileri yerleşik TCP-IP yığını aracılığıyla aktarmak için kullanılır ve ikincisi, SIM900'ün dahili mantığı tarafından halihazırda uygulanan HTTP protokolünü kullanır. Bu yöntemlerin nasıl farklı olduğunu, her birinin artıları ve eksilerinin neler olduğunu öğrenmek için Google ve Yandex'e ne kadar eziyet etsem de hiçbir şey bulamadım, bu yüzden ikisini de denedim ve pratik deneyimimi burada paylaştım.

    Her iki yöntem de çalışıyor ve var olma hakkına sahip.

    TCP-IP yığınının başlatılması biraz daha zordur (modüle daha fazla komutun iletilmesi gerekir) ve yönetilmesi biraz daha zordur. Bir istek göndermek için bir bağlantı açmanız, bir yanıt beklemeniz ve bağlantıyı zarif bir şekilde kapatmanız gerekir.

    HTTP, basit bir ifadeyle SIM900'de yerleşik tarayıcıdır. Başlatılması kolaydır, sunucu ile değişim başlatmak için bir oturum açmanız gerekir. Aynı zamanda her istekle bağlantının açılıp kapanması ve diğer "organizasyonel görevlerin" çözümü SIM900'ün omuzlarına düşüyor. Bu kullanışlıdır, ayrıca SIM900'ün tüm "yardımcı işlemleri" kontrol denetleyicisinin yapabileceğinden daha hızlı gerçekleştirebilmesi nedeniyle bu şekilde veri aktarımı biraz daha hızlıdır.

    Bu nedenle, bir değişim yöntemi seçerken hala HTTP protokolüne karar verdim.

    Sunucuya yanlış GET isteği

    GPRS üzerinden veri aktarımına yönelik çalışmamın en başında, bana bir günden fazla eziyete mal olan bir hata yaptım. GET istekleri aracılığıyla sunucuyla etkileşim kurma konusunda yeterli deneyime sahip olmadığım için internette yüzeysel bilgi edindiğim için bir form talebinde bulundum:

    http://xxx.ru/d_command.php?UC=1111 HTTP/1.1 ALIN
    Sunucu: xxx.ru

    Bu istek doğru değil, ancak hata ayıklama istekleri gönderdiğim tarayıcı ve proxy sunucusu tarafından mükemmel bir şekilde "yenildi" - bu yüzden isteğin doğru olduğunu düşündüm.

    En şaşırtıcı şey, SIM900'ün "kötü" bir istekle de iyi başa çıkmasıdır (ve daha sonra istekleri TCP-IP yığını aracılığıyla gönderdim). Ancak bir gün sunucu bu tür isteklere 404 hatasıyla yanıt vermeye başladı.Bu, açıklığa kavuşturulamayan koşullar nedeniyle oldu, ya barındırma sağlayıcısı istek işleme algoritmalarını değiştirdi (bunu reddediyor) ya da mobil operatör bunu yaptı. Ama gerçek şu ki. Daha sonra aynı isteği HTTP aracılığıyla göndermeye çalıştım; her şey işe yaradı. Bu, SIM900 modülünün dahili HTTP protokolünün (dediğim gibi, aslında yerleşik tarayıcının) yanlış istekleri doğru bir şekilde "ayrıştırabilmesi" ve bunları ağa doğru biçimde yayınlayabilmesiyle açıklanmaktadır. Bu, programcıya bazı yanlışlıklar yapılmasına izin verdiği için HTTP kullanmanın başka bir avantajıdır (tabii ki şüphelidir). Genel olarak elbette isteğin doğru yazılması ve şöyle görünmesi gerekir:

    GET /d_command.php?UC=1111 HTTP/1.1
    Sunucu: xxx.ru

    Böylesine doğru bir istekle SIM900, hem TCP-IP yığını hem de HTTP üzerinden başarılı bir şekilde alışveriş yapar.

    SIM900 sıkışmış

    Bazen GPRS üzerinden alışveriş yaparken modülün donabileceği durumlar ortaya çıkar. Bunun nedeni, ağ üzerinden gelen ve SIM900'ü sersemleten yanlış verilerden veya modül ve denetleyicinin değişim hattında SIM900'ün "beklediği gibi değil" aldığı parazitten veya diğer bazı bilinmeyen sorunlardan kaynaklanıyor olabilir. Çip üreticisi bunun olabileceği konusunda uyarıyor ve bu gibi durumlarda modülün PWRKEY girişine uygulanan özel bir darbe dizisi kullanılarak sıfırlanmasını öneriyor.

    Ancak, ortaya çıktığı gibi, bu her zaman yardımcı olmuyor - böyle bir yeniden başlatmanın ardından modül hala "arızalı" olarak "uyanabilir". Modülün Veri Sayfasını dikkatlice okursanız üretici de bizi bu konuda uyarıyor. İşte belgelerin önerdiği şey:

    NOT: SIM900, AT komutu “AT+CPOWD=1” ve PWRKEY pinine yanıt veremediğinde, harici sıfırlama pini kullanmak yerine VBAT güç kaynağının doğrudan kesilmesi önerilir.

    Bu nedenle, modülü yeniden başlatmanın en doğru yolu, gücü tamamen kesmek (VBAT pininden), bir duraklama tutmak (her ihtimale karşı en az bir saniye) ve gücü yeniden uygulamaktır. Modülü kartta sıfırlamak için, kontrolör tarafından kontrol edilen bir röle veya transistör anahtarı sağlamak daha iyidir.

    Çözüm

    Gelecekte, bir sağlayıcıdan barındırma satın almaktan ve kontrol programları için kod yazmaya kadar, bir sunucu web uygulaması ile SIM900 arasındaki değişimi nasıl organize edeceğinizi anlatacağım bir dizi makale-ders yayınlamayı planlıyorum.

    Güle güle! Güncellemeler için bizi takip etmeye devam edin TEMBEL AKILLI .

    Sonunda DIY ortamındaki belki de en popüler GSM modülünü - GSM900'ü incelemeyi başardım. GSM modülü nedir? Bu, bir cep telefonunun işlevlerini uygulayan bir cihazdır. Başka bir deyişle GSM900, hücresel şebekenin diğer abonelerini aramanıza, çağrı almanıza, SMS mesajları gönderip almanıza olanak tanır. Ve elbette verileri GPRS protokolü aracılığıyla iletmek.

    Bu modüle çok özel bir amaç için ihtiyacım vardı: uzaktan kumandalı bir aydınlatma sistemi projesi ortaya çıktı. Bu sorunu çözmenin en kolay yolu SMS mesajlarıdır: bir sms gönderildi - ışık açıldı, başka bir sms gönderildi - kapalı. Uzaktan kumandaya gerek yok ve herkesin bir telefonu var (evsizlerin bile). Aslında bu yazıda GSM900 modülünü kullanmak için tam olarak bu seçeneği ele alacağım.

    1. Firmware

    Kaderin iradesiyle GSM900A modülü elimdeydi. Bu şeyin yeniden canlandırılmasıyla ilgili karşılaştığım ilk forumu okuduktan sonra, isimdeki A harfinin modülün Asya bölgesine ait olduğu anlamına geldiği ortaya çıktı. Bu nedenle operatörlerimizle çalışmayacak. Umutsuzluk 🙁

    Neyse ki, aynı forumdaki aşağıdaki yazılar güven verici bilgiler içeriyordu :) Her şeyin o kadar da kötü olmadığı ve modülün bölgemizde çalışabilmesi için yeniden başlatılması gerektiği ortaya çıktı. Bu süreç meslektaşımız Alex-EXE'nin blogunda çok iyi anlatılmıştır: donanım yazılımı "hepsi bir arada" sim900
    Ben de aynısını yapmaya çalışacağım, ancak daha ayrıntılı olarak ve modülümün özelliklerini dikkate alarak.

    Doğru modüle sahipseniz ve herhangi bir ürün yazılımı gerekmiyorsa hemen bölüm #2'ye geçebilirsiniz.

    Aletler

    Bu nedenle, başlamak için gerekli tüm araçları hazırlayacağız. İlk olarak, doğrudan ürün yazılımı için, İnternette () kolayca bulunabilen SIM900 Serisi indirme Araçları Geliştirme uygulamasına ihtiyacınız olacaktır.

    İkinci olarak, 1137B02SIM900M64_ST_ENHANCE ürün yazılımı dosyasının kendisi de kullanışlıdır ve bu da kolayca elde edilebilir ().

    Son olarak, üçüncü olarak, modülü denemek için iyi bir terminale ihtiyacımız olacak. Genelde TeraTerm kullanıyorum ama bu sefer yetmedi (ya da anlamadım). Harika bir isme sahip bir canavar kurmam gerekiyordu.

    USB-UART köprüsüne bağlanma

    Şimdi RX ve TX hatlarını köprüye bağlıyoruz. Sonuncusu olarak CP2102'yi kullandım. Benim durumumda, mantığın aksine, köprünün RX ve TX'i GSM modülünün RX ve TX'ine simetrik olarak (ve alışılageldiği gibi çapraz olarak değil) bağlandı.

    Modüldeki tepe akımı 2A'ya (sözde) ulaşabildiğinden, modüle kararlı ve güçlü bir kaynaktan da güç vermelisiniz. 4 adet AA pil için uygundur. Tam bağlantı şeması şuna benzer:

    SIM900
    CP2102 Toprak Toprak
    CP2102 +5V VCC_MCU
    CP2102RX SIMR
    CP2102TX SIMT
    Harici kaynak +5V VCC5
    Harici kaynak Gnd Toprak
    RST

    Bu modelde sıfırlama düğmesi yoktur, bu nedenle ürün yazılımı için RST kontağını birkaç saniyeliğine yere atmamız gerekir. Bunun için şimdilik havada asılı bırakacağız.

    Modül ön yapılandırması

    Firmware'e geçmeden önce modüle bağlanıp UART hızını değiştireceğiz. Bunu yapmak için Terminal terminalini başlatın, doğru bağlantı noktasını seçin ve döviz kurunu 9600 olarak ayarlayın. Bundan sonra "Bağlan"a tıklayın.

    Modül ile tüm iletişim AT komutları aracılığıyla gerçekleşir.

    Modüle söyleyeceğimiz ilk şey en ilkel AT komutu olacak: "AT". Bu, modülün "Tamam" kelimesiyle yanıt vermesi gereken bir tür pingdir.

    Her şey yolunda gittiyse ve modül bize gerçekten “Tamam” yanıtını verdiyse, hız ayarlama komutunu göndeririz:

    AT+IPR=115200

    Komutun sonunda bir servis satırbaşı karakteri - CR bulunmalıdır. ASCII tablosunda 13 kodu (veya onaltılık sistemde 0x0D) bulunur. Terminalimizde giriş satırının karşısındaki “+CR” onay kutusunu işaretlerseniz sembol otomatik olarak değiştirilecektir. Diğer terminaller de benzer ayarlara sahiptir.

    Girilen komuta yanıt olarak tekrar "Tamam" alacağız.

    Firmware prosedürünü hızlandırmak için bu ayara ihtiyacımız olacak. Aksi takdirde Alex-EXE'nin blogunda belirttiği gibi ürün yazılımının yüklenmesi yaklaşık bir saat sürecektir.

    Program ayarları

    Tüm kablolar doğru yerlere takıldıktan ve modül cihaz yazılımı için hazır hale geldikten sonra, SIM900 Serisi indirme Araçları Geliştirme uygulamasını başlatıyoruz. Programın kurulumu yalnızca birkaç öğeden oluşur:

    • Hedef alanında hedef çipi belirtin. Bazı nedenlerden dolayı, yazılımı SIM900A'ya yükleyemedim, bu yüzden "SIM900"ü seçtim;
    • Bağlantı Noktası alanında doğru bağlantı noktasını seçin;
    • Baud Hızı 115200'e ayarlandı;
    • Son olarak, Çekirdek Dosya alanında ürün yazılımı dosyasını (cla uzantılı bir dosya) belirtin.

    Ayarları olan her şey.

    Firmware

    Artık altı önemli adımı katı ve tutarlı bir şekilde gerçekleştiriyoruz.

    • Gücü modüle (4 pilimiz) bağlıyoruz. Kırmızı güç ışığı yanmalı ve durum ışığı yanıp sönmeye başlamalıdır.
    • USB-UART'ı bilgisayara bağlıyoruz.
    • RST telini yere kapatıyoruz (bunca zaman havada asılı kaldığını unutmayın).
    • Programdaki İndirmeyi Başlat düğmesine basın.
    • İçimizde üçe kadar sayıyoruz ve RST'yi yerden kaldırıyoruz.

    Firmware tamamlanana kadar 6 dakika bekliyoruz.

    Firmware'den sonra elimizde ne var?

    Öncelikle modül artık operatörlerimizle çalışabiliyor. İkinci olarak, örneğin baz istasyonlarından modül koordinatlarını alma, e-posta ile çalışma ve ek 2,5 MB belleğe erişim gibi özelliklere sahip genişletilmiş ürün yazılımı kurduk.

    2. GSM modülü ile yapılan deneyler

    Şimdi modülle çeşitli faydalı işlemler gerçekleştirmeye çalışalım. Öncelikle PIN kodunu girin (varsa):

    AT+CPIN=8899

    Modülün yanıtı şöyle olacaktır:

    CPİN: HAZIR.

    Daha sonra modülden bazı bilgiler alıyoruz.

    AT+GMR - ürün yazılımı tanımlayıcısı. AT+GSN-IMEI. AT+CPAS - durum (0 - çalışmaya hazır, 2 - bilinmiyor, 3 - gelen çağrı, 4 - sesli bağlantı). +POLİSLERDE mi? - operatör hakkında bilgi.

    Telefon çağrıları

    Şimdi bir numara çevirelim. Bu, şu komut kullanılarak yapılır:

    ATD+790XXXXXXXX;

    Komutun sonundaki noktalı virgül çok önemli, unutmayın!

    UART oturumu sırasında birisi cihazı ararsa aşağıdaki mesaj döndürülür:

    Aramayı şu komutla cevaplayabilirsiniz (telefonu kaldırabilirsiniz):

    Modüle kulaklık ve mikrofon bağlıysa, uzaktaki bir aboneyle sanki normal bir cep telefonu kullanıyormuş gibi iletişim kurabilirsiniz.

    Komut çağrıyı sonlandırır:

    SMS gönderme

    İlk önce kısa mesaj modunu etkinleştirin:

    AT+CMGF=1

    ve kodlamayı ayarlayın:

    AT+CSCS = "GSM"

    Modül ayrıca otomatik sistemler için daha uygun olan diğer kodlamaları da destekler. Ancak deneylerimiz için telefonun sayılarla ayarlandığı ve mesaj metninin ASCII kodlamasında yazıldığı GSM modunu kullanmak en uygunudur. Şimdi birisine mesaj gönderelim:

    AT+CMGS = "+79123456789"

    Ve komutun sonuna aynı anda iki hizmet karakteri eklemelisiniz: CR ve LF. Terminal'de bu, CR=CR+LF seçeneğini işaretleyerek veya satırın sonuna manuel olarak şunu ekleyerek yapılabilir: AT+CMGS="+79123456789"&0D&0A

    Bu komutu girdikten sonra yanıt, mesaj girmenin başladığını belirten ">" sembolü olacaktır. Bir metin yazıyoruz:

    Selam Dünya!

    Mesajın sonunda iki özel karakterden birini geçmemiz gerekecek. Mesaj göndermek için ASCII tablosundan 26 numaralı karakteri girin. Gönderimi iptal etmek için 27 numaralı karakteri girin.

    Kullandığımız terminalde, bir karakteri koda göre göndermek için iki ifadeden biri kullanılabilir: onaltılı sistemde: $1A ve ondalık sistemde: #026

    SMS alma

    Oturum sırasında cihaza bir SMS alınırsa aşağıdaki formatta bir mesaj döndürülecektir:

    CMTI: "SM",4

    burada 4, gelen okunmamış mesajın numarasıdır.

    AT+CMGR=4

    Yanıt olarak şunu alıyoruz:

    CMGR: "KAYIT OKU", "+790XXXXXXXX", "13/09/21,11:57:46+24" Merhaba Dünya! TAMAM

    Genel olarak her şey basittir. Bu, planlarımızı uygulamamız için oldukça yeterli. GFM900'ün yeteneklerini daha derinlemesine incelemek için Alex-EXE'nin başka bir makalesini okumanızı tavsiye ederim: sim900 modem gsm komutlarda

    3. Mikrodenetleyicilerle etkileşim

    Genel olarak harici cihazları kontrol etmek için GSM900 modülünü başka bir mikro denetleyiciyle eşleştirmek kesinlikle gerekli değildir. Bu modülde ücretsiz GPIO pinleri ile her şeyi yapacak kendi programınızı oluşturabilirsiniz. Bununla birlikte, çoğu hazır kartta GPIO'lar kablolu değildir, bu nedenle tasarlanan cihazın bir prototipini oluşturmak için en basit Arduino Uno / Nano'yu kullanacağız.

    Arduino ve GSM900 aynı UART arayüzü üzerinden haberleşecek. Bunu yapmak için bu iki cihazı aşağıdaki şemaya göre bağlayacağız:

    GSM900 GND VCC_MCU SIMT SIMR
    Arduino Uno GND +5V RX Teksas

    Şimdi SMS mesajlarını yakalayacak ve 13 numaralı bacaktaki LED'i birkaç saniyeliğine açacak bir program oluşturalım. Bununla bazı harici cihazların kontrolünü simüle ediyoruz.

    Const String dönüşü = "1234"; const int rel_pin = 13; Dize ss = ""; // Pin kodu gönderiliyor void sendPin()( String cmd = "AT+CPIN="+spin+char(0x0D); Serial.print(cmd); ) // LED'i 2 saniyeliğine yakıyorum void writeSMS(String s) )( digitalWrite(rel_pin, HIGH); gecikme(2000); digitalWrite(rel_pin, LOW); ) // Modülden gelen dizeyi ayrıştırın void parseString(String src)( bool Collect = false; String s = ""; for(bayt i =0;i

    Programı Arduino'ya yükleyip sistemi test ediyoruz. Her şey doğru yapılırsa cihaza SMS mesajı gönderildiğinde LED 2 saniye boyunca yanacaktır. Elbette LED yerine kır evindeki ısıtma kazanının bağlı olduğu güçlü bir röleyi açıp kapatabilirsiniz.