Communicatie-interface tussen SIM300 en ATmega32. Ervaring met GSM-modem SIM900

Kan worden gebruikt in apparaten waar communicatie over lange afstanden vereist is. Een persoon bestuurt bijvoorbeeld een robot in Moskou terwijl hij in Krasnodar zit! Of een boer zet vanuit zijn huis, enkele kilometers van het veld, de waterpomp aan in een rijstveld! Er zijn verschillende opties om met het apparaat te communiceren:

Eenvoudige communicatie op basis van SMS-berichten:
Schakel het apparaat in/uit met eenvoudige sms-opdrachten. U kunt elke mobiele telefoon gebruiken om het apparaat te bedienen.
Beveiligings-/brandmeldsysteem dat de eigenaar hierover informeert noodgeval in huis via sms.

Op oproep gebaseerde communicatie:
Een slim inbraak-/brandalarm dat de politie of brandweer belt en een noodsituatie meldt met behulp van vooraf opgenomen spraakberichten.

Communicatie via internet (GPRS):
De gebruiker kan het apparaat bedienen vanaf elke pc/tablet/mobiele telefoon die met internet is verbonden. Informatiedisplays die op snelwegen zijn geïnstalleerd, worden bijvoorbeeld bestuurd vanuit een centrale controlekamer.
Robotgestuurd via internet. Zo'n robot is toegankelijk vanaf elk apparaat dat met internet is verbonden, waar ook ter wereld.
Draagbare apparaten geïnstalleerd in voertuigen, die verbinding maken met internet via de SIM300 GPRS-module en de huidige positie toevoegen (met behulp van GPS (Global Position System, Globaal systeem Positionering)) naar de server. Deze gegevens worden samen met de voertuig-ID uit een database op de server opgeslagen. Om de route van de auto te bekijken, kunt u vanaf uw computer verbinding maken met de server Help de wereld Breed web(Wereldwijde web).

Voordelen van het gebruik van de SIM300-module

De SIM300 Kit is compleet onafhankelijke module met SIM-kaartconnector, voeding, enz. Deze module kan eenvoudig worden gekoppeld aan goedkope AVR/PIC/8051-microcontrollers. De communicatie met de microcontroller vindt plaats via een asynchroon seriële poort. Dit is het basistype seriële communicatie dat door de meeste microcontrollers in hardware wordt ondersteund. Gegevens worden bit voor bit overgedragen en verzameld in bytes. Op hoog niveau het ziet eruit als een eenvoudige tekststroom. Er zijn in totaal twee stromen: één van de microcontroller naar SIM300 en de andere van SIM300 naar de microcontroller. Commando's worden als platte tekst verzonden.

Als u nog nooit seriële datatransmissie heeft gebruikt of er nog nooit van heeft gehoord, is het raadzaam om te begrijpen hoe het werkt en te oefenen met eenvoudigere voorbeelden.

Communicatie met SIM300-module met behulp van AVR UART

De microcontrollerhardware die wordt gebruikt voor seriële communicatie heet UART en we gebruiken deze om te communiceren met de SIM300-module (deze kan ook worden gebruikt om te communiceren met andere apparaten, bijvoorbeeld RFID-lezers, GPS-modules vingerafdrukscanners, enz.). UART is een veelgebruikte communicatiemethode in de elektronicawereld. We hebben er een schone en eenvoudige bibliotheek voor geschreven die we in al onze UART-projecten gebruiken.

Aangezien een byte van SIM300 op elk moment bij de microcontroller kan aankomen, wat gebeurt er als de microcontroller met iets anders bezig is? Om dit probleem op te lossen, hebben we op interrupts gebaseerde buffering van inkomende gegevens gemaakt. De buffer is binnen RAM microcontroller. Het heeft een functie waarmee u het aantal bytes in de wachtrij kunt bepalen.

Hieronder staan ​​de functies van de AVR USART-bibliotheek:

void USARTInit(uint16_t ubrrwaarde)

Initialiseren van de AVR USART-hardware. Parameterwaarde ubrrwaarde de gewenste gegevensoverdrachtsnelheid is ingesteld. Standaard datasnelheid voor SIM300: 9600 bps. Voor AVR-microcontroller werkend op een waarde van 16 MHz ubrrwaarde want zo'n snelheid zou er moeten zijn 103 .

char UReadData()

Eén teken uit de wachtrij lezen. Als er niets in de wachtrij staat, is het antwoord 0.

void UWriteData(char-gegevens)

Schrijft één byte aan gegevens naar de Tx-regel met behulp van de functie UWriteString().

uint8_t UDataAvailable()

Rapporteert de hoeveelheid gegevens in de FIFO-wachtrij.

void UWriteString(char *str)

Schrijft een op nul eindigende C-stijltekenreeks naar de Tx-regel.
Voorbeeld 1: UWriteString("Hallo wereld!");
Voorbeeld 2: char naam = "Avinash!"; UWriteString(naam);

void UReadBuffer(void *buff,uint16_t len)

Kopieert de inhoud van de FIFO-buffer naar het geheugen dat is opgegeven door buff. De hoeveelheid gekopieerde gegevens wordt bepaald door de len-parameter. Als er via UART minder gegevens dan nodig zijn (in overeenstemming met de len-parameter) in de FIFO-buffer worden ontvangen, wordt de resterende ruimte gevuld met nullen.

char gsm_buffer;
UReadBuffer(gsm_buffer,16);

In het bovenstaande voorbeeld worden 16 bytes aan gegevens (indien aanwezig) uit de FIFO-buffer in een variabele gelezen gsm_buffer. merk dat op gsm_buffer er wordt een array van 128 bytes toegewezen omdat we later mogelijk meer dan 16 bytes nodig hebben. Deze buffer kan dus worden gebruikt om in de toekomst maximaal 128 bytes te lezen.

De hierboven weergegeven functie wordt meestal gebruikt in combinatie met UDataAvailable().

while(UDataBeschikbaar()<16)
{
//Niets doen
}

char gsm_buffer;
UReadBuffer(gsm_buffer,16);

Het hierboven getoonde codefragment wacht tot er 16 bytes aan gegevens in de buffer zitten en leest het vervolgens.

void UFlushBuffer()

Annuleert het wachten van de FIFO-buffer op gegevens. Voordat u een nieuw commando naar de GSM-module verzendt, annuleert u eerst de FIFO-buffer die op gegevens wacht.

De bovenstaande functies worden gebruikt voor het verzenden en ontvangen van tekstopdrachten van de SIM300 GSM-module.

AT-opdrachtenset voor SIM300

Nu u bekend bent met de basisprincipes van de AVR USART-bibliotheek en hoe deze wordt gebruikt om de USART te initialiseren en gegevens te verzenden en te ontvangen, is het tijd om de SIM300-moduleopdrachten te leren en hoe u deze kunt verzenden en reacties kunt ontvangen. SIM300 heeft verschillende functies: sms versturen, bellen, etc. Elk van deze functies wordt uitgevoerd na een specifiek commando, en SIM300 heeft zijn eigen set commando's.

Alle SIM300-opdrachten beginnen met een voorvoegsel AT+ en einde Vervoer terug(afgekort als Carriage Return). De ASCII-code voor CR is 0x0D (decimaal 13). Alle opdrachten die u naar SIM300 verzendt, worden teruggestuurd op de SIM300 TX-lijn. Dat wil zeggen, als u een commando van 7 bytes verzendt (inclusief de laatste CR), dan ontvangt u deze 7 bytes onmiddellijk via UART in de buffer. Als u deze niet ontvangt, betekent dit dat er iets mis is!

De eerste functie die we zullen bestuderen zal zijn SIM300Cmd(const char *cmd), het doet het volgende:

  • Schrijft opdrachten gespecificeerd door de parameter cmd.
  • Voegt toe CR na het commando.
  • Wacht tot het commando terugkeert en als het binnenkomt vóór de time-out, reageert het SIM300_OK(constante gedefinieerd in sim300.h). Als je te lang hebt gewacht op een terugbetaling en deze niet is aangekomen, reageert ze SIM300_TIMEOUT.

Let op: Alle SIM300-afhankelijke functies worden opgeslagen in het bestand sim300.c. Patronen en constanten worden opgeslagen in sim300.h

Werken met SIM300Cmd()

Int8_t SIM300Cmd(const char *cmd) ( UWriteString(cmd); //Stuur opdracht UWriteData(0x0D); //CR uint8_t len=strlen(cmd); len++; //Voeg 1 toe voor volgende CR toegevoegd aan alle opdrachten uint16_t i= 0; //Wacht op echo terwijl(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; }

Het commando wordt meestal gevolgd door een antwoord. Het reactieformulier is:
LF- Line Feed, de ASCII-code is 0x0A (10 in decimalen)

Terwijl u wacht op een reactie na het verzenden van een opdracht, kunnen er dus drie dingen gebeuren:

  • Er is lange tijd geen antwoord. Een waarschijnlijke oorzaak kan zijn dat de SIM300 niet is aangesloten op de microcontroller.
  • Het antwoord werd ontvangen, maar niet het verwachte antwoord. De oorzaak kan een defecte seriële lijn zijn, een verkeerd ingestelde baudrate of een microcontroller die op de verkeerde frequentie werkt.
  • Correct antwoord ontvangen.

Het commando bijvoorbeeld Netwerkregistratie verkrijgen(Netwerkregistratie) wordt als volgt uitgevoerd: Command String: " AT+CREG?"

Antwoord(Antwoord): +CREG: , OK

U ziet dat het juiste antwoord 20 bytes is. Dat wil zeggen, na het versturen van het commando "AT + CREG?" u moet wachten totdat er 20 bytes zijn ontvangen of totdat een bepaalde tijd is verstreken. Aan de tweede voorwaarde wordt voldaan om bevriezing te voorkomen als de SIM300 defect is. Dat wil zeggen dat in plaats van eeuwig op een antwoord te wachten, er een fout zal optreden als de SIM300 er te lang over doet om te reageren (dit wordt een time-out genoemd)

Als het juiste antwoord wordt ontvangen, analyseren we de variabele om informatie te verkrijgen over registratie in het netwerk.

Afhankelijk van de huidige status van registratie in het netwerk kan de waarde zijn: 0 - Niet geregistreerd, SIM300 is momenteel niet op zoek naar een nieuwe operator om te registreren. 1 - Geregistreerd in het thuisnetwerk. 2 - Niet geregistreerd, SIM300 is momenteel op zoek naar een nieuwe operator om te registreren. 3 - Registratie is geweigerd. 4 - Onbekend. 5 - Geregistreerd, roaming.

Werken met SIM300GetNetStat()

Int8_t SIM300GetNetStat() ( //Send Command SIM300Cmd("AT+CREG?"); //Wacht nu op antwoord uint16_t i=0; //juiste antwoord is 20 bytes lang //Dus wacht tot we 20 bytes hebben // in buffer terwijl (i<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; }

De functie wordt op precies dezelfde manier geïmplementeerd: int8_t SIM300IsSIMInserted()

Bij een ander type antwoord weten we vooraf niet de exacte omvang van het antwoord, zoals bij het bovenstaande commando. Dit is bijvoorbeeld de opdracht Get Service Provider Name, waarbij de lengte van de operatornaam vooraf onbekend is. Dit kunnen MTS, Beeline, etc. zijn. Om dit probleem op te lossen, gebruiken we wat zich voor en na het antwoord bevindt CR LF. Dus bufferen we eenvoudigweg alle karakters totdat we ze tegenkomen CR, wat het einde van het antwoord betekent.

Om de verwerking van dergelijke opdrachten te vereenvoudigen, hebben we een functie gemaakt
SIM300WaitForResponse (uint16_t time-out)

Deze functie wacht op een antwoord van SIM300 (het einde van het antwoord wordt aangegeven door CR) en rapporteert de grootte van het antwoord, terwijl het antwoord zelf wordt gekopieerd naar een globale variabele sim300_buffer.

Als het antwoord niet vóór de time-out wordt ontvangen, is het antwoord 0. De time-outtijd in milliseconden kan worden ingesteld met de parameter time-out. Het telt geen late LF's of laatste OK's mee, ze blijven in de UART FIFO-buffer. Dus voordat we terugkeren, gebruiken we het commando UFlushBuffer() om ze uit de buffer te verwijderen.

Werken met SIM300WaitForResponse (time-out uint16_t)

Int8_t SIM300WaitForResponse(uint16_t time-out) ( uint8_t i=0; uint16_t n=0; while(1) ( while (UDataAvailable()==0 && n

Werken met SIM300GetProviderName (char *name) De functie doet het volgende:

  1. Wist de USART-buffer om eventuele fouten of reacties te verwijderen.
  2. Verzendt het commando "AT+CSPN?" met behulp van de SIM300Cmd-functie ("AT + CSPN?");
  3. Vervolgens wacht het op een antwoord met behulp van de functie SIM300WaitForResponse().
  4. Als we een antwoord krijgen dat niet nul is, wordt dit geparseerd om de naam van de operator te achterhalen.

De volgende functies worden op een vergelijkbare manier geïmplementeerd:

  • uint8_t SIM300GetProviderName(char *naam)
  • int8_t SIM300GetIMEI(char *emei)
  • int8_t SIM300GetManufacturer(char *man_id)
  • int8_t SIM300GetModel(char *model)
uint8_t SIM300GetProviderName(char *name) ( UFlushBuffer(); //Stuur opdracht 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,""");

SIM300 en ATmega32. Hardware

Om de communicatie met SIM300 aan te tonen met behulp van AVR ATmega32, hebben we de volgende componenten nodig:
- ATmega32 met bedrading – reset register, ISP-pinnen, 16 MHz kwarts.
- +5V-bron voor het voeden van ATmega32 en LCD-display.
- LCD-scherm met 16x2 tekens om de resultaten aan te geven.
- SIM300-module.

We hebben het Xboard-ontwikkelbord gebruikt omdat het een ATmega32 met kabelboom, een +5V-voeding en een LCD-display heeft.

Demobroncode voor AVR en SIM300

De demo-broncode is geschreven in C en gecompileerd met behulp van de gratis AVR-GCC-compiler, met behulp van de nieuwste . Het project is opgedeeld in de volgende modules:

  • LCD-bibliotheek
    - Bestanden lcd.c, lcd.h, myutils.h, custom_char.h
    - Zijn taak is het besturen van een standaard 16x2 LCD-scherm.
    - Meer gedetailleerde informatie vindt u op de link.
  • USART-bibliotheek
    - Bestanden usart.c, usart.h
    - Haar taak is het besturen van de hardware-USART-microcontroller AVR. Bevat functies voor USART-initialisatie, het verzenden/ontvangen van tekens en het verzenden/ontvangen van tekenreeksen.
  • SIM300-bibliotheek
    - Bestanden sim300.c, sim300.h

Stap-voor-stap opzet van een AS6-project

Maak een nieuw AS6-project met de naam "Sim300Demo".
Maak met behulp van de oplossingsverkenner (projectboom) een map met de naam "lib" in de huidige map.
Maak in de map "lib" de mappen "LCD", "USART" en "SIM300" aan.
Kopieer de bestanden (met Windows Verkenner) lcd.c, lcd.h, myutils.h, custom_char.h naar de lcd-map.
Kopieer de bestanden (met Windows Verkenner) usart.c, usart.h naar de map USART
Kopieer de bestanden (met Windows Verkenner) sim300.c, sim300.h naar de map SIM300.
Voeg de bestanden lcd.c, lcd.h, myutils.h en custom_char.h toe aan het project met behulp van de oplossingsverkenner (projectboom).
Voeg filesusart.c, usart.h toe aan het project met behulp van de oplossingsverkenner (projectboom).
Voeg bestanden sim300.c, sim300.h toe aan het project met behulp van de oplossingsverkenner (projectboom).
Definieer F_CPU = 16000000 AS6-gebruik.
Kopieer en plak het hoofdbestand Sim300Demo.c in het programma.
Compileer het project om een ​​hex-bestand te verkrijgen.
Flash Xboard met behulp van een USB-programmeur.
Als u een nieuwe ATmega32-microcontroller gebruikt, stelt u LOW FUSE in op 0xFF en HOGE ZEKERING aan 0xC9.

Wat doet het demoprogramma?

Initialiseert het LCD-scherm en de SIM300-module.
Controleert of de SIM300-module is aangesloten op de USART en reageert zoals verwacht.
Toont de IMEI van de SIM300-module.
Toont fabrikant-ID
Controleert de aanwezigheid van een simkaart.
Zoekt naar een GSM-netwerk en brengt een verbinding tot stand. Hiervoor heeft u een actieve simkaart nodig.
Toont de naam van de operator, zoals MTS of Megafon.

Mogelijke problemen

Geen beeld op LCD

Zorg ervoor dat uw AVR Studio-project is ingesteld op een kloksnelheid van 16 MHz (16000000 Hz)
Pas het contrast aan met de potentiometer.
Druk meerdere keren op de resetknop.
Schakel het apparaat meerdere keren in/uit.
Sluit het LCD-scherm alleen aan zoals weergegeven in het diagram.

De fout "Geen reactie" verschijnt tijdens de initialisatie van de SIM300

Controleer de integriteit van de Rx-, Tx- en GND-lijnen tussen SIM300 en Xboard.
Zorg ervoor dat de microcontroller op 16 MHz draait.
Stel de zekeringen precies in zoals hierboven beschreven.

Compilerfouten

Veel mensen gebruiken programma's die al zijn geschreven en gecompileerd. Ze missen ervaring en zijn niet bekend met de basisprincipes van programmeren en compileren. Vertrouwd raken met compilers en hoe ze werken op verschillende platforms (PC/MAC/Linux) is een goed begin. Embedded systemen zijn niet geschikt om de basis te leren. Ze zijn bedoeld voor degenen die over deze vaardigheden beschikken en deze eenvoudig kunnen gebruiken.
Zorg ervoor dat alle LCD-bibliotheekbestanden aan het project zijn toegevoegd.
Zorg ervoor dat AVR-GCC is geïnstalleerd. (Windows-distributie heet WinAVR)
Zorg ervoor dat uw AVR Studio-project is ingesteld op AVR GCC.

Algemene tips voor beginners

Gebruik kant-en-klare debugboards en programmeurs.
Probeer te studeren op basis van artikelen en leerboeken.

Lijst met radio-elementen

Aanduiding Type Denominatie Hoeveelheid OpmerkingWinkelMijn notitieblok
U1 MK AVR 8-bits

ATmega32

1 Naar notitieblok
U2 Lineaire regelaar

LM7805

1 Naar notitieblok
D1 Gelijkrichterdiode

1N4007

1 Naar notitieblok
D2 LED 1 Naar notitieblok
C1, C2 Condensator22 pF2 Naar notitieblok
C3, C4, C6 Condensator0,1 µF3

Eindelijk slaagde ik erin om misschien wel de meest populaire GSM-module in de doe-het-zelf-omgeving te bestuderen: GSM900. Wat is een GSM-module? Dit is een apparaat dat de functies van een mobiele telefoon implementeert. Met andere woorden, met GSM900 kunt u andere mobiele netwerkabonnees bellen, oproepen ontvangen en SMS-berichten verzenden en ontvangen. En natuurlijk gegevens verzenden via het GPRS-protocol.

Ik had deze module nodig voor een heel specifiek doel: ik bedacht een project voor een op afstand bestuurbaar verlichtingssysteem. De eenvoudigste manier om dit probleem op te lossen is via sms-berichten: stuur één sms - het lampje gaat aan, stuur een andere - hij gaat uit. Je hebt geen afstandsbedieningen nodig en iedereen heeft een telefoon (zelfs daklozen). Eigenlijk zal ik in dit artikel precies deze optie voor het gebruik van de GSM900-module overwegen.

1. Firmware

Zoals het lot het wilde, kreeg ik uiteindelijk de GSM900A-module in mijn handen. Na het lezen van het eerste forum dat ik tegenkwam over de heropleving van dit ding, bleek dat de letter A in de naam betekent dat de module tot de Aziatische regio behoort. En daarom zal hij niet samenwerken met onze operators. Moedeloosheid 🙁

Gelukkig bevatten de volgende berichten op hetzelfde forum geruststellende informatie :) Het bleek dat niet alles zo slecht is, en om de module in onze regio te laten werken, hoeft deze alleen maar opnieuw te worden geflashed. Dit proces staat goed beschreven in de blog van onze collega Alex-EXE: “all in one” sim900 firmware
Ik zal proberen hetzelfde te doen, maar dan nog gedetailleerder en rekening houdend met de kenmerken van mijn module.

Als u over de juiste module beschikt en er geen firmware nodig is, kunt u onmiddellijk naar sectie nr. 2 gaan.

Hulpmiddelen

Laten we dus eerst alle benodigde hulpmiddelen voorbereiden. Ten eerste heeft u rechtstreeks voor de firmware de download Tools Develop-applicatie van de SIM900-serie nodig, die eenvoudig op internet te vinden is ().

Ten tweede zal het firmwarebestand zelf 1137B02SIM900M64_ST_ENHANCE ook nuttig zijn, dat ook gemakkelijk te verkrijgen is ().

Ten derde hebben we een goede terminal nodig om met de module te experimenteren. Meestal gebruik ik TeraTerm, maar deze keer waren de mogelijkheden ervan niet voldoende (of ik begreep het niet). Ik moest een monster met een briljante naam installeren.

Verbinding met USB-UART-brug

Nu verbinden we de RX- en TX-lijnen met de brug. Voor dat laatste heb ik CP2102 gebruikt. In mijn geval waren, in tegenstelling tot de logica, de RX en TX van de brug symmetrisch verbonden met de RX en TX van de GSM-module (en niet kruislings, zoals gebruikelijk).

Je moet de module ook van stroom voorzien via een stabiele en krachtige bron, aangezien de piekstroom op de module (vermoedelijk) 2A kan bereiken. Geschikt voor 4 AA-batterijen. Het volledige aansluitschema ziet er als volgt uit:

SIM900
CP2102 Gnd Gnd
CP2102 +5V VCC_MCU
CP2102RX SIMR
CP2102TX SIMT
Externe +5V-bron VCC5
Externe bron Gnd Gnd
RST

Dit model heeft geen resetknop, dus om de firmware te flashen, moeten we de RST-pin een paar seconden naar aarde gooien. Om dit te doen, laten we het voorlopig in de lucht hangen.

Voorconfiguratie van modules

Voordat we beginnen met het flashen van de firmware, zullen we verbinding maken met de module en de UART-snelheid wijzigen. Om dit te doen, start u de Terminal-terminal, selecteert u de juiste poort en stelt u de wisselkoers in op 9600. Klik daarna op “Verbinden”.

Alle communicatie met de module vindt plaats via AT-opdrachten.

Het eerste dat we de module vertellen, is het meest primitieve AT-commando: “AT”. Dit is een soort ping waarop de module moet reageren met het woord “OK”.

Als alles goed is gegaan en de module ons echt “OK” heeft geantwoord, sturen we het commando voor de snelheidsinstelling:

AT+IPR=115200

Aan het einde van de opdracht moet er een harde return-teken staan: CR. In de ASCII-tabel heeft het code 13 (of 0x0D in hexadecimaal). Het symbool wordt automatisch ingevoegd als u het selectievakje “+CR” naast de invoerregel in onze terminal aanvinkt. Andere terminals hebben ook vergelijkbare instellingen.

Als reactie op het ingevoerde commando ontvangen we opnieuw “OK”.

We hebben deze instelling nodig om de firmwareprocedure te versnellen. Anders zal de firmware, zoals Alex-EXE in zijn blog aangaf, ongeveer een uur duren.

Het programma instellen

Nadat alle draden op de juiste plaatsen zijn aangesloten en de module is voorbereid voor firmware, start u de SIM900 Series download Tools Develop-applicatie. Het opzetten van het programma bestaat uit slechts een paar punten:

  • In het Doelveld geven we de doelchip aan. Om de een of andere reden kon ik de firmware niet uploaden naar SIM900A, dus koos ik voor “SIM900”;
  • selecteer de juiste poort in het veld Poort;
  • Stel de baudsnelheid in op 115200;
  • Geef ten slotte het firmwarebestand op in het veld Kernbestand (bestand met de cla-extensie).

Dat is het met de instellingen.

Firmware

Nu voeren we strikt en consequent zes belangrijke stappen uit.

  • We sluiten stroom aan op de module (onze 4 batterijen). Het rode aan/uit-lampje moet gaan branden en het statuslampje moet gaan knipperen.
  • Wij verbinden USB-UART met de computer.
  • We sluiten de RST-draad met aarde (onthoud dat deze al die tijd in de lucht hing).
  • Klik op de knop Downloaden starten in het programma.
  • In ons hoofd tellen we tot drie en tillen de RST van de grond.

We wachten 6 minuten totdat de firmware is voltooid.

Wat hebben we na de firmware?

Ten eerste kan de module nu samenwerken met onze operators. Ten tweede hebben we geavanceerde firmware geïnstalleerd, waarvan de functies bijvoorbeeld het ontvangen van modulecoördinaten van zendmasten, het werken met e-mail en toegang tot 2,5 MB extra geheugen omvatten.

2. Experimenten met GSM-module

Laten we nu proberen verschillende nuttige bewerkingen uit te voeren met de module. Voer eerst uw pincode in (als u die heeft):

AT+CPIN=8899

Het antwoord van de module zal zijn:

CPIN: KLAAR.

Hierna ontvangen wij wat informatie van de module.

AT+GMR - firmware-identificatie.

AT+GSN - IMEI.

AT+CPAS - status (0 – klaar voor werk, 2 – onbekend, 3 – inkomend gesprek, 4 – spraakverbinding).

AT+COPS? - informatie over de exploitant.

Telefoongesprekken

Laten we nu een nummer bellen. Dit gebeurt met behulp van het commando:

ATD+790XXXXXXX;

De puntkomma aan het einde van de opdracht is erg belangrijk, vergeet deze niet!

Als iemand het apparaat belt tijdens een UART-sessie, wordt het volgende bericht geretourneerd:

U kunt de oproep beantwoorden (opnemen) met het commando:

Als er een hoofdtelefoon en een microfoon op de module zijn aangesloten, kunt u met een externe abonnee communiceren alsof u een gewone mobiele telefoon gebruikt.

Het commando beëindigt het gesprek:

Sms versturen

Laten we eerst de sms-modus inschakelen:

AT+CMGF=1

en stel de codering in:

AT+CSCS= "GSM"

De module ondersteunt ook andere coderingen die handiger zijn voor automatische systemen. Maar voor onze experimenten is het het handigst om de GSM-modus te gebruiken, waarin de telefoon in cijfers wordt gespecificeerd en de tekst van berichten wordt geschreven in ASCII-codering. Laten we nu iemand een bericht sturen:

AT+CMGS = "+79123456789"

En aan het einde van de opdracht moet je twee servicetekens tegelijk toevoegen: CR en LF. In Terminal kunt u dit doen door CR=CR+LF aan te vinken, of handmatig aan het einde van de regel toe te voegen: AT+CMGS=»+79123456789″&0D&0A

Na het invoeren van deze opdracht wordt als reactie het symbool “>” ontvangen, wat het begin van het invoeren van een bericht aangeeft. We schrijven een tekst:

Hallo wereld!

Als er tijdens een sessie een sms naar het apparaat wordt verzonden, wordt een bericht in het volgende formaat geretourneerd:

CMTI: "SM",4

hier is 4 het nummer van het binnenkomende ongelezen bericht.

AT+CMGR=4

Als reactie krijgen we:

CMGR: "OPN. LEZEN","+790XXXXXXXX","","13/09/21,11:57:46+24" Hallo wereld!

OK

Over het algemeen is alles eenvoudig. Dit is voor ons voldoende om onze plannen te verwezenlijken. Voor een diepere studie van de mogelijkheden van de GFM900 raad ik aan een ander artikel van Alex-EXE te lezen: at-commands voor de gsm-modem sim900

3. Interactie met microcontrollers

Over het algemeen is het voor het besturen van externe apparaten helemaal niet nodig om de GSM900-module met een andere microcontroller te koppelen. U kunt uw eigen programma in deze module insluiten, dat doet wat u wilt met gratis GPIO-pinnen. In de meeste kant-en-klare borden worden de GPIO's echter niet gerouteerd, dus om een ​​prototype van het beoogde apparaat te maken, zullen we de eenvoudigste Arduino Uno/Nano gebruiken.

Arduino en GSM900 communiceren via dezelfde UART-interface. Om dit te doen, verbindt u deze twee apparaten volgens het volgende schema: GSM900 GND VCC_MCU SIMT
SIMR GSM900 Arduino Uno +5V RX

TX

Laten we nu een programma maken dat SMS-berichten opvangt en de LED op poot nr. 13 een paar seconden laat oplichten. Hiermee simuleren we de besturing van een extern apparaat.

Const String-spin = "1234"; const int rel_pin = 13; Tekenreeks ss = ""; // Stuur een pincode void sendPin())( String cmd = "AT+CPIN="+spin+char(0x0D); Serial.print(cmd); ) // Schakel de LED gedurende 2 seconden in void receiverSMS(String s)( digitalWrite(rel_pin, HIGH); delay(2000); digitalWrite(rel_pin, LOW); // Parseer de string die uit de module kwam void parseString(String src)( bool collect = false; String s = ""; voor(byte i =0;


We laden het programma op de Arduino en testen het systeem. Als alles correct is gedaan, wordt bij het verzenden van een sms-bericht naar het apparaat de LED gedurende 2 seconden ingeschakeld. Natuurlijk kunt u in plaats van een LED een krachtig relais in- en uitschakelen waarop de verwarmingsketel in een landhuis is aangesloten.
Hier ontstond de taak om een ​​landhuis te beheren en de temperatuur, deuren en ramen te bewaken. En toen rees de vraag over het datatransmissiemedium. Welnu, draden en een radiokanaal zijn niet langer nodig vanwege de hoge kosten, glasvezelcommunicatielijnen zijn slechts een droom, maar GSM is wat je nodig hebt. In eerste instantie viel mijn oog op de oude telefoons "Motorola", "Nokia", "SonyEricsson". Ik keek, draaide me om en veranderde van gedachten. Ten eerste wilde ik niet aan de knopcontacten solderen en er was geen feedback. Ten tweede is het begrijpen van de telefoonsoftware helemaal geen probleem. Over het algemeen werd door creatief denken en zwemmen in de uitgestrektheid van het World Wide Web, nadat we een paar virussen hadden opgevangen, een compromis gevonden. En werk softwarematig en zonder knoppen. De module biedt dit allemaal SIM900D. Waarom vond ik hem leuk?
- De eerste is installatiegemak. Dit zul je later zien.
- De tweede is communicatie via UART. (Dit betekent MK + SIM900D = normale communicatie) - De derde is de voeding van de module van 3 naar 4,8 volt. Hosh AVR, hosh ARM. Om te proeven. Nou, genoeg over de teksten, het is tijd om aan de slag te gaan.

Deze module ziet er zo uit.

Wat betreft de installatie. Zoals u kunt zien, is de module ontworpen voor opbouwmontage. De afmetingen van de contactvlakken zijn zelfs voor LUT's groot genoeg. Hieronder ziet u een foto van mijn apparaat.

Zoals je kunt zien, niets ingewikkelds. Laten we het nu hebben over het aansluitschema voor dit wonder. Laten we de handleiding eens bekijken. En we zien de pin-out.

Ja, er zijn veel dingen, maar we zullen ze niet allemaal gebruiken. Het eerste dat we moeten doen is alle "GND" -pinnen aan elkaar binden. Als je naar de rechterbovenhoek kijkt, zie je drie afzonderlijke pinnen. Twee "GND" en "ANT". Deze conclusies zijn niet voor niets zo geplaatst. Laten we de documentatie bekijken voor een afbeelding van de antenneaansluiting.

De contacten 59 en 61 moeten zich zo dicht mogelijk bij de antenneaansluiting bevinden. Er zijn extra circuits nodig die met stippellijnen zijn gemarkeerd om antennes met kabel aan te sluiten. Daarom heb ik de SMA-connector zo dicht mogelijk bij pinnen 59, 60, 61 gesoldeerd en heb ik me niet druk gemaakt over het aanpassingscircuit, terwijl ik met een antenne aan een kabel van 3 meter en op een plaats met zeer slechte ontvangst 13 punten perste van de 31 van de module De connector is zichtbaar in de afbeelding hierboven. Om precies te zijn, de poten komen er vandaan)) De connector zelf bevindt zich aan de andere kant. In dit geval lijken de contacten 59 en 61 de antenne te omhelzen. Nou ja, zoiets. Laten we het vervolgens hebben over de simkaart. Om het te installeren, heb ik deze connector gebruikt (SIM ICA-501-006-01-F7)

Het meest interessante is dat ik 3 opties heb gevonden voor de pinout van simkaarten. Welke moet ik gebruiken? Ik zal geen intriges introduceren, maar voor de eenvoud zal ik de pin-out van deze connector geven. Bovenaanzicht. Maar dat is niet alles. Als je in de handleiding naar het aansluitschema van de simkaart kijkt, zie je dat daar een bepaalde microschakeling wordt genoemd. Deze microschakeling bevat maar liefst 5 beveiligingsdiodes. Nodig om SIM-kaartcontacten te beschermen. Je hoeft het natuurlijk niet te installeren, maar wees dan voorzichtig en raak de contacten niet met je vingers aan!!! Als zondig persoon kan ik niet voor mezelf instaan, dus heb ik de mikruhu gesoldeerd. En hier is het diagram zelf.

Uiteraard wordt dit gegeven voor een 8-pins simkaart, maar voor een 6-pins zal het hetzelfde zijn. Er zijn eigenlijk twee problemen met deze microschakeling. De eerste is waar je haar in godsnaam kunt vinden. En het tweede is de grootte... Toen ik de bestelling ontving en eruit haalde, legde ik hem op tafel... Kortom, op de tweede foto van bovenaf is hij tussen de simkaart en de batterij gesoldeerd. Ter vergelijking: de weerstanden zijn 0805. Aan de rechterkant staat een transistor in een SOT-23-pakket. Het lijkt er dus op dat we de simkaart hebben uitgezocht, laten we verder gaan. En dan de lichttechniek. Over het algemeen geldt dit niet voor iedereen. Omdat al deze signalen rechtstreeks in de MK kunnen worden ingevoerd en deze het daar zelf kunnen laten uitzoeken. Ik heb ze allemaal uit hun gevoel voor schoonheid gehaald. Dus beslis zelf.
- De eerste is het signaal of de module wel of niet is ingeschakeld (STATUS) log 1 - De tweede is het signaal van de aanwezigheid van netwerkregistratie (NETLIGHT) log 1/0 (knippert) Als deze met dezelfde frequentie knippert, betekent dat het niet in het netwerk is geregistreerd. Als er een lange pauze is, betekent dit dat er een verbinding met het netwerk is.

- De derde is het oproep-/sms-signaal (RING) log. 0 Licht op als er een oproep binnenkomt en knippert bij ontvangst van een SMS-bericht. De eerste twee signalen moeten via een NPN-transistor in schakelmodus worden aangesloten.

En het derde signaal (RING) moet via een PNP-transistor worden aangesloten. Een ander belangrijk signaal is de knop om de module aan en uit te zetten. (Waar zouden we zijn zonder haar). Dit is wat de handleiding ons biedt.
Dat wil zeggen, we hebben log 1 gedurende 1 seconde op de basis van de transistor toegepast en de module is ingeschakeld.

Laten we het nu over voeding hebben. Ja, ik zou het nu niet erg vinden om eens lekker te worstelen, jij ook? Oké, laten we verder gaan. De module wordt gevoed door een spanning van 3 tot 4,8 volt. Alles lijkt eenvoudig, maar dat is het niet. Bij het bellen, versturen van een SMS of het zoeken naar een netwerk kan de module maximaal 2A nodig hebben. Wauw. Fans van LM7805 en Krenok kunnen dus teleurgesteld zijn. Gelukkig bevat de handleiding twee circuits gebaseerd op de MIC29302-microcircuits (ik heb deze nooit in de uitverkoop gevonden) en LM2596 (deze kun je kopen). Maar ik ben lui en ik had gewoon geen zin om de pital met zoveel omsnoering in elkaar te zetten. Ik zocht op internet en vond het. Er is zo'n goede stabilisator voor processors als "Stump", "AMD" bij 3,3V en tot 7,5A. Nou, ik denk dat dat is wat je nodig hebt en dat je de ARM en de module van stroom kunt voorzien. Hier is een diagram van dit wonder.

Ik heb de radiator uit angst geïnstalleerd; in principe wordt de microschakeling zelfs tijdens een gesprek niet warm. En het laatste waar je op moet letten is de batterij. Het is nodig om de realtimeklok levend te houden. Het belangrijkste is dat je deze conclusie niet in de lucht kunt laten hangen. Persoonlijk heb ik afgesproken om de batterij aan te sluiten, wat ik voor je wens. Je kunt er natuurlijk twee AA)) op plakken, maar deze is op de een of andere manier te groot, maar in de vorm van een tablet 2032 op 3V is wat je nodig hebt. Gelukkig zijn ze niet duur en kunnen de compartimenten direct op het bord worden gesoldeerd. Naar mijn mening is dit de eenvoudigste oplossing. Het is aan jou om te beslissen. Nou, dat is alles. Zo ziet al deze schande er samen en in werkende staat uit.

In het volgende artikel zal ik je vertellen hoe ik deze module kapot heb gemaakt, maar programmatisch via de terminal met behulp van AT-opdrachten.
Ik heb de diagrammen in PCAD-2006 opgemaakt
Archief met GSM-modulebestanden.
Archief met stabilisatieblokbestanden.
Vervolg van de serie artikelen over de GSM-module.
AT-opdrachten.
Communicatie van de module met ATmega8515.
Ontwikkelbord gebaseerd op SIM900D


Foli 14/03/13

Ik wil graag meer weten over AT-commando's, UART en het direct hiermee werken in CodeVision

Alexey 15/03/13

Ik begrijp AT-commando's. Ik wil de helft van het werk niet posten omdat ik wat vragen heb. Maar met UART en CVAVR is alles eenvoudig. Zodra ik de AT-commando's heb ontdekt, zal ik onmiddellijk posten welke commando's en hoe ik ze vanuit CVAVR kan indienen.

Anatok 04.11.13

Het is allemaal prachtig. Maar als het alarm minimaal bij min 30 graden zou werken en vooral in de winter zou worden opgeladen met verborgen zonnepanelen, dan zouden er veel mensen zijn die zo'n apparaat zouden willen hebben.

Alexey 04.11.13

De GSM-module verbruikt tot 2A bij aanmelding op het netwerk, bij het bellen of communiceren via GPRS. Dergelijke bronnen vereisen een goede batterij, en bij -30 zal de batterij niet lang meegaan. Ook bij weerstations op straatsensoren is het aan te raden eenvoudige batterijen te gebruiken.

Beer 11.11.13

Als het nog steeds relevant en interessant is...kijk dan naar EAT voor SIM900. Binnen ARM zit een SDK waarin je applicaties in SIM900 kunt laden van waaruit je veel dingen kunt doen... bijvoorbeeld dezelfde AT-opdrachten verzenden... + toetsenbord + SPI-display... + 2 ADC's :) Fijne avond :)

Beer 11.11.13

Maar het is nog steeds erg leuk om er stroom voor te maken op de L5973D. Ja, er staat over 2A in de datasheet... maar in de praktijk zijn dit impulsen op zeer korte termijn. Voor mij werkt het bijvoorbeeld prima met Arduino Mega, die zelf wordt gevoed door een USB-poort (die een stroomsterkte heeft van 0,5 A)

Alexey 11.11.13

Dit is het probleem. In eerste instantie heb ik hem ook gevoed vanuit de 7805, alles werkte, en toen bam... En wanneer verbonden met het netwerk, gaat alles uit, en dan start hij opnieuw op. Blijkbaar herstart de waakhond na een voederaanval. En met de L7953D wordt het prachtig, maar waar kan ik hem krijgen en hoeveel gaat hij kosten :) Dus ik ben overgestapt op IRU1075

Alexey 11.11.13

Mijn excuses voor de fouten, het is die verdomde GOODROYD die de croakers voor mij aan het beeldhouwen is. Hij denkt dat hij slimmer is. Ik ga niet editen, laat Google zich schamen voor hun werk.

Oom Misha 24/12/13

Wanneer ik me registreer op het Atmega-netwerk, wordt het opnieuw opgestart. Hoewel het pulse dcdc kost. 200 microfarad-condensatoren. En soms werkt het stabiel. Ik ben al uitgeput.

Alexey 25/12/13

Regeling naar de studio. Het is vrij moeilijk om het probleem uit woorden te begrijpen.

Oom Misha 25/12/13
Oom Misha 25/12/13

Http://ybex.com/d/tk7kgiefpklpeujb1zbl4lo5 mrkf7ayvci04ouq3.html De MK wordt aangedreven door 2,8 (ik heb zelfs 3,7 geprobeerd) Volt, om de niveau-omzetter niet te storen.

Alexey 25/12/13
Sergej 19/07/14

Hallo Alexey!

Hebben jullie kant-en-klare boards met sim900, kan ik deze kopen?

Alexey 19/07/14

In welke zin klaar? De module zelf is al in elkaar gezet en het enige dat overblijft is het maken van een bord met de benodigde in- en uitgangen voor een specifiek apparaat. Het bord in dit artikel is slechts een demobord voor het debuggen van programma's. Een specifiek apparaat vereist afmetingen, locatie van connectoren, hoofdtelefoon- en microfoonuitgangen. Waar komt de antenneconnector? Geef meer gedetailleerde informatie over wat u nodig heeft.

Andrej 28/09/14

Zoals ik het begrijp, is dit een prototype van de sjaal waar ik niet op kan wachten om te zien. Alleen in de commerciële versie werd hij voorzien van een voeding en geüpgraded met audio-uitgangen. Dat er een grote buzz is.

Alexey 09.28.14

In welke zin klaar? De module zelf is al in elkaar gezet en het enige dat overblijft is het maken van een bord met de benodigde in- en uitgangen voor een specifiek apparaat. Het bord in dit artikel is slechts een demobord voor het debuggen van programma's. Een specifiek apparaat vereist afmetingen, locatie van connectoren, hoofdtelefoon- en microfoonuitgangen. Waar komt de antenneconnector? Geef meer gedetailleerde informatie over wat u nodig heeft.

Eigenlijk is dat zo. Ik heb zojuist meerdere vliegen in één klap gedood. Het eeuwenoude probleem met stroomvoorziening en niveaumatching op de UART opgelost. En voor chique extra audio-invoer en -uitvoer. Eigenlijk een kant en klare mobiele telefoon.

In welke zin klaar? De module zelf is al in elkaar gezet en het enige dat overblijft is het maken van een bord met de benodigde in- en uitgangen voor een specifiek apparaat. Het bord in dit artikel is slechts een demobord voor het debuggen van programma's. Een specifiek apparaat vereist afmetingen, locatie van connectoren, hoofdtelefoon- en microfoonuitgangen. Waar komt de antenneconnector? Geef meer gedetailleerde informatie over wat u nodig heeft.

Ik wil graag een bijdrage leveren voor de toekomst. In essentie is dit bord een compleet geheel. En het kan PRAKTISCH worden gebruikt in het eindproduct. er is echter één MAAR. Bij een meson-luifel is het beter om deze er bovenop te plaatsen (antenneconnector, toegang tot de simkaart), dus het is zeer raadzaam om gaten evenwijdig aan alle pinnen voor de “rand” voor dezelfde pinnen te laten met de mogelijkheid soldeer ze in de "neerwaartse" richting. Die. Ik wilde dit apparaat op een microcontrollerbord aansluiten, het naar het jouwe leiden, de bijpassende connectoren erin solderen en het aansluiten. Ook met

Zoals ik het begrijp, is dit een prototype van de sjaal waar ik niet op kan wachten om te zien. Alleen in de commerciële versie werd hij voorzien van een voeding en geüpgraded met audio-uitgangen. Dat er een grote buzz is.
Ik heb de helft van de boodschap opgegeten, maar ik hoop dat het idee duidelijk is-)

Sergej 01/02/15

Vertel me waarom de module warm wordt en geen verbinding maakt met het netwerk?

Hiervoor zijn verschillende redenen. Ten eerste wordt de voeding overschreden. Ten tweede: ging de plus naar de algemene? Je moet goed naar de krachtbenen kijken. Ten derde, of de buik van de module de toevoerleidingen raakt. Er zijn verschillende technologische contacten op de buik die moeten worden geïsoleerd van eventuele geleiders. Ten vierde: is de antenne-aansluiting kortgesloten met de gemeenschappelijke aansluiting? Om preciezer te zijn, moet je naar het bord kijken. Stuur mij de vergoeding per e-mail en ik kijk of er iets mis is.

Ik heb de helft van de boodschap opgegeten, maar ik hoop dat het idee duidelijk is-)

Ik heb fabrieksborden, MasterKit BM8039, en beide hebben hetzelfde probleem... wanneer je een simkaart plaatst, begint de module op te warmen en is er geen netwerk.

Vertel me waarom de module warm wordt en geen verbinding maakt met het netwerk?

Het is best lastig om te zeggen. Het circuit is in de fabriek, je moet op het bord klimmen. Uit de documentatie blijkt duidelijk dat het bord niet over de aanbevolen beveiligingsdiodes voor de simkaart beschikt. Hebben de kaart zelf en de connector dezelfde pinnen? De 300-module is oud en werkt naar mijn mening alleen met 5V-simkaarten, maar nu zijn ze allemaal 3V. Maar ik kan het mis hebben. Je moet naar het bord zelf kijken, het is zo moeilijk om iets te zeggen. Als het symptoom bij beide hetzelfde is, zou ik in de richting van de connector en de spanning van de simkaarten vallen. Nogmaals, moderne simkaarten zijn 3 volt.

Ik heb de helft van de boodschap opgegeten, maar ik hoop dat het idee duidelijk is-)

Het kost sim900D...er zijn geen diodes. Als ik de kaart erin steek, verschijnt er stroom op de module en begint deze op te warmen, maar bijvoorbeeld op de simkaart. werkt niet vanaf 9 meter...

Ik heb de helft van de boodschap opgegeten, maar ik hoop dat het idee duidelijk is-)

Aanvankelijk werkten ze prima... toen ging er iets mis... Ik weet niet wat...

Ik heb de helft van de boodschap opgegeten, maar ik hoop dat het idee duidelijk is-)

Is er een manier om de module te controleren zonder deze te desolderen?

Vertel me waarom de module warm wordt en geen verbinding maakt met het netwerk?

Wat is er precies kortgesloten? Als er geen stroom op de simkaart staat, ben ik bang dat de lijn voor de simkaart dood is. Hoeveel poten heeft Simka? 6 of 8? Ter controle kunt u met de module communiceren via de UART 3, 4-poots bus zonder een simkaart te plaatsen. Als hij weigert AT-commando's te accepteren, dan denk ik dat we hem kunnen begraven.

ANONIEM 01/02/15

Ik weet niet precies wat de kortsluiting veroorzaakte.. 8 poten.. maar hoe te communiceren?

Vertel me waarom de module warm wordt en geen verbinding maakt met het netwerk?

Staat er ook 8 op de connector? Neem de FT232RL-chip en monteer de USB-adapter<->TTL, soldeer aan de UART van de module, start een terminal, bijvoorbeeld Putty, schrijf AT en druk op enter. Als het OK retourneert, is niet alles verloren. Als er stilte is... In de prullenbak. En ja, wat voor LED's zitten er op het bord? Hoe wordt de registratie op het netwerk bepaald?

Sergey 02.02.15 03:12

Er zitten er ook 8 op de connector...er zijn twee LED's op het bord, groen en rood, de aanwezigheid van een netwerk wordt bepaald doordat het groene lampje elke drie seconden knippert...kan ik op de een of andere manier een foto van het bord invoegen ?

Alexey 02.02.15 07:42

Het is gemakkelijker om naar het forum te gaan.

Sergej 02.02.15 14:02

Als u geen SIM-kaart plaatst, betekent dit dan dat u de module van stroom moet voorzien?

Alexey 02.02.15 15:48

Ik kan het niet zien aan de theeblaadjes. Ik heb een schema of een bord nodig. En wat hebben de voeding van de module en de simkaart ermee te maken? Het kruist hoogstwaarschijnlijk een andere microcontroller. Hij zorgt voor voedsel. Over het algemeen heb je een diagram nodig. En het is alsof je via de telefoon een diagnose stelt.

Sergej 02.02.15 15:56

Waar op het forum kan ik het schema plaatsen?

Sergej 02.02.15 15:57

De module krijgt alleen stroom als u een simkaart plaatst

Alexey 02.02.15 19:27

Nou, de SIM900D-module heeft dat niet. Om de module in te schakelen, moet u het lage niveau op poot 12 vasthouden en vervolgens omhoog brengen. De SIM-kaart kan helemaal niet worden geplaatst of verwijderd wanneer de module is ingeschakeld, er bestaat een mogelijkheid dat de poort wordt verbrand. Als u de documentatie bekijkt, vindt u daar aanbevelingen voor het installeren van beveiligingsdiodes op de simkaartpoortlijn. Op het forum. Maak een onderwerp aan en plaats een foto.

Jevgeni 09/08/15 12:04

Wanneer ik spanning op de module aanbreng, is er een positieve potentiaal op de 12e poot en een positieve potentiaal op de 5e poot (op voorwaarde dat deze poten in de lucht hangen). Vertel me alsjeblieft, moet er een nul staan ​​op de vijfde etappe? Zo niet, corrigeer mij dan alstublieft.

Alexey 09/08/15 13:21

De 12e etappe is de opname van de module. Wanneer er stroom wordt ingeschakeld, hangt er 1 aan. Om de module in te schakelen, moet je de 12e poot een paar seconden op de gemeenschappelijke draad drukken, dat wil zeggen, 0 toepassen. Wanneer er stroom wordt geleverd aan module 5, moet de poot dat doen. door twee weerstanden naar de gemeenschappelijke draad worden getrokken (dit is te zien aan het aansluitschema van de transistor in schakelmodus) en deze moet 0 zijn, omdat de basis naar nul moet worden getrokken om de transistor volledig te sluiten. Nadat de 12e etappe op nul is gezet, zou 1 op de 5e etappe moeten verschijnen, en na een tijdje een meander die de status van beschikbaarheid en verbinding met het netwerk aangeeft.

De hieronder beschreven ervaring met het gebruik van SIM900 zal nuttiger zijn voor degenen die al een beetje met de module hebben gewerkt. Voor de lezers die net beginnen met het bestuderen van deze microschakeling en van plan zijn deze te gebruiken om gegevens via internet uit te wisselen, hebben we een reeks lessen over dit onderwerp voorbereid. Hier .

SIM900 is dus een GSM-module van SIM COM, bestuurd door AT-opdrachten, die kan sms'en, bellen, een directe CSD-verbinding kan organiseren en informatie kan uitwisselen via GPRS.

In mijn handen had ik een SIM900 GPRS-foutopsporingsbord, besteld in China - compatibel met het Arduino-platform.

Het bord bevat de SIM900-chip zelf, connectoren voor een microfoon en hoofdtelefoon, een voedingsschakelaar (van een externe connector of van Arduino), een antenne, verschillende LED's om de bedrijfsmodi aan te geven, een connector voor een batterij (indien real-time klok nodig) en een aan/uit-knop. Ik vond een goede beschrijving op de wiki van de fabrikant . Er is ook code voor het besturen van de modem in verschillende modi.

Zoals de fabrikant ons vertelt, is het bord perfect compatibel met Arduino Uno. Het SIM900-bord wordt eenvoudigweg op de Uno aangesloten en begint onmiddellijk te werken. Het bleek echter dat de Arduino Uno misschien “zwak” blijkt te zijn voor het implementeren van sommige functies, maar ik zal hier hieronder over praten.

Het bord werkt met Arduino Mega met enkele beperkingen. Dit komt door het feit dat Mega, in tegenstelling tot Uno, pin 7 en 8 heeft, die niet beschikbaar zijn voor gebruik als seriële software (software USART). Dit kan worden opgelost door de USART-interface naar poten 0 en 1 te schakelen; hiervoor zijn op het SIM900-bord jumpers aanwezig.

Over het algemeen kan het bord op elke controller met een USART-interface worden aangesloten. Ik probeerde bijvoorbeeld de modem te besturen met de STM32F4-controller.

SIM900: SMS-berichten en oproepen

Het testen van de module voor het uitwisselen van SMS-berichten en bellen was een groot succes! De module kon deze taken zonder problemen aan, hiervoor heb ik eenvoudig c dezelfde site, compileerde en flashte deze code in Arduino Uno:

//Seriële relais - Arduino patcht een //seriële link tussen de computer en het GPRS-schild //op 19200 bps 8-N-1 //Computer is verbonden met hardware-UART //GPRS-schild is verbonden met de software-UART #include SoftwareSeriële GPRS(7, 8); niet-ondertekende char-buffer; // bufferarray voor gegevensontvangst via seriële poort int count=0; // teller voor bufferarray void setup() ( GPRS.begin(19200); // de GPRS-baudsnelheid Serial.begin(19200); // de seriële poort van de Arduino-baudsnelheid. ) void loop() ( if (GPRS .available()) // als de datum afkomstig is van de softwareseriële poort ==> gegevens komen van het gprs-schild ( while(GPRS.available()) // gegevens lezen in char-array ( buffer=GPRS.read(); // gegevens naar array schrijven if(count == 64)break; Serial.write(buffer,count); // als er geen datatransmissie eindigt, schrijf dan buffer naar hardware seriële poort clearBufferArray(data van de array count = 0 /); / stel de teller van while-lus in op nul ) if (Serial.available()) // als er gegevens beschikbaar zijn op de hardware-seriële poort ==> gegevens komen van pc of notebook GPRS.write(Serial .read() // write naar het GPRS-schild ) void clearBufferArray() // function to clear buffer array ( for (int i=0; i

Om opdrachten naar de module te kunnen sturen, moet deze op een computer zijn aangesloten. Dit kan gedaan worden via de Arduino USB-poort. Op een computer heeft u hiervoor een COM-poortmonitor nodig. Je kunt het downloaden vanaf hier, of u kunt de monitor gebruiken die in de Arduino IDE is ingebouwd.

Het enige dat het Arduino-firmwareprogramma doet, is gebruikersopdrachten 'vangen' en deze naar de module sturen, en vervolgens de antwoorden naar de SIM900 terugsturen naar de gebruiker. Door handmatig AT-opdrachten naar de module te sturen, heb ik dus de ontvangst en verzending van sms-berichten getest, en door een microfoon en hoofdtelefoon op de juiste connectoren aan te sluiten, heb ik de SIM900-module als mobiele telefoon gebruikt.

Gegevensoverdracht via GPRS met SIM900

Ik begon mijn eerste experimenten met gegevensoverdracht via GPRS met behulp van het Arduino UNO-platform om de SIM900 te besturen (simpelweg omdat deze bij de hand was). Om te beginnen kocht ik hosting met een server waarop Apatche draaide en installeerde ik er een eenvoudige applicatie op die vakkundig kon reageren op GET-verzoeken. Het werkte! Ik stuurde nog steeds opdrachten van de pc naar de Arduino-controller, die ze op zijn beurt naar de SIM900 stuurde.

Alles werkte correct zolang de GET-verzoeken kort genoeg waren (maximaal 100 tekens). Maar zodra de verzoeken langer werden, begonnen de mislukkingen: de verzoeken werden niet volledig verzonden. Er is opgemerkt dat storingen kunnen verschijnen of verdwijnen, zelfs wanneer het Arduino-besturingsprogramma met meerdere regels wordt vergroot/verkleind. Vervolgens bleek dat de storingen te maken hadden met de software USART, waarmee de Arduino UNO communiceert met de SIM900, omdat zo'n USART is volledig afhankelijk van de programmacyclus van de controllerkern. Als de hoeveelheid gegevens klein is, heeft deze altijd tijd om te worden verzonden, en als de hoeveelheid gegevens toeneemt, hangt het resultaat van de verzending af van de duur van de programmacyclus.

Conclusie uit al het bovenstaande: het is ONMOGELIJK om software USART te gebruiken bij het communiceren met SIM900, vooral als het gaat om een ​​grote hoeveelheid verzonden gegevens.

De Arduino Uno heeft slechts één ‘hardware’ USART-interface, die werd gebruikt voor uitwisseling met een pc, dus moesten we de UNO verlaten en vervangen door de Arduino Mega, die niet lijdt onder het gebrek aan ‘hardware’ USART’s. Na zo'n "rokade" werd de werking van het apparaat stabiel en correct.

SIM900: TCP-IP-stack of HTTP? Welke is beter?

Terwijl ik de handleiding voor modembeheer bestudeerde, ontdekte ik dat er twee groepen AT-opdrachten zijn. De eerste groep wordt gebruikt om gegevens te verzenden via de ingebouwde TCP-IP-stack, en de tweede gebruikt het HTTP-protocol dat al is geïmplementeerd door de interne logica van SIM900. Hoe ik Google en Yandex ook heb gekweld om erachter te komen hoe deze methoden verschillen, wat de voor- en nadelen van elk van hen zijn, ik kon niets vinden, dus ik heb ze allebei geprobeerd en deel hier mijn praktische ervaring.

Beide methoden werken en hebben bestaansrecht.

De TCP-IP-stack is iets moeilijker te initialiseren (er moeten meer opdrachten aan de module worden doorgegeven) en is iets moeilijker te beheren. Om een ​​verzoek te verzenden, moet u een verbinding openen, op een antwoord wachten en deze op de juiste manier sluiten.

HTTP is, simpel gezegd, een browser die in de SIM900 is ingebouwd. Het is eenvoudig te initialiseren; om te kunnen communiceren met de server, moet u een sessie openen. Tegelijkertijd vallen het openen en sluiten van een verbinding bij elk verzoek en het oplossen van andere "organisatorische taken" op de schouders van SIM900. Dat is handig, en de gegevensoverdracht gaat op deze manier iets sneller, juist omdat de SIM900 alle “hulpbewerkingen” sneller kan uitvoeren dan de besturingscontroller.

Dus bij het kiezen van de uitwisselingsmethode heb ik nog steeds gekozen voor het HTTP-protocol.

Onjuist GET-verzoek aan de server

Helemaal aan het begin van mijn werk bij het verzenden van gegevens via GPRS, maakte ik een fout die me meer dan één dag kwelling kostte. Omdat ik niet voldoende ervaring had met de interactie met de server via GET-verzoeken, heb ik, nadat ik oppervlakkige kennis op internet had opgedaan, een verzoek samengesteld als:

KRIJG http://xxx.ru/d_command.php?UC=1111 HTTP/1.1
HOST: xxx.ru

Dit verzoek is niet correct, maar het werd perfect "opgegeten" door de browser en de proxyserver van waaruit ik verzoeken om foutopsporing stuurde - daarom beschouwde ik het verzoek als correct.

Het meest verrassende is dat de SIM900 ook goed omging met een “slecht” verzoek (en ik verzond destijds verzoeken via de TCP-IP-stack). Op een mooie dag begon de server echter op dergelijke verzoeken te reageren met fout 404. Dit gebeurde vanwege omstandigheden die nog niet zijn opgehelderd: ofwel de hostingprovider heeft de algoritmen voor het verwerken van het verzoek gewijzigd (hij ontkent dit), of de mobiele operator deed het. Maar het feit blijft een feit. Vervolgens probeerde ik hetzelfde verzoek via HTTP te verzenden - alles werkte. Dit wordt verklaard door het feit dat het interne HTTP-protocol van de SIM900-module (zoals ik al zei, in wezen een ingebouwde browser) in staat is om onjuiste verzoeken correct te "parseren" en deze in de juiste vorm naar het netwerk uit te zenden. Dit is een ander voordeel (twijfelachtig natuurlijk) van het gebruik van HTTP, omdat het de programmeur enkele onnauwkeurigheden mogelijk maakt. Over het algemeen moet het verzoek uiteraard correct zijn geschreven en er als volgt uitzien:

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

Met een dergelijk correct verzoek wisselt SIM900 succesvol uit, zowel via de TCP-IP-stack als via HTTP.

SIM900 loopt vast

Soms ontstaan ​​er bij het uitwisselen via GPRS situaties waardoor de module vastloopt. Dit kan te wijten zijn aan onjuiste gegevens die via het netwerk binnenkwamen en de SIM900 in een verdoving brachten, of aan interferentie op de uitwisselingslijn van de module en controller, waardoor SIM900 "niet ontving wat hij verwachtte", of een ander onbekend probleem. De chipfabrikant waarschuwt dat dit kan gebeuren en stelt voor om in dergelijke gevallen de module opnieuw op te starten met behulp van een speciale reeks pulsen die op de PWRKEY-ingang worden toegepast.

Het bleek echter dat dit niet altijd helpt - na een dergelijke herstart kan de module "wakker worden" en nog steeds "glitchy" zijn. En de fabrikant waarschuwt ons hier ook voor als we de DataSheet voor de module aandachtig lezen. Dit is wat de documentatie aanbeveelt:

OPMERKING: Het wordt aanbevolen om de VBAT-voeding direct af te sluiten in plaats van een externe reset-pin te gebruiken wanneer de SIM900 niet kan reageren op het AT-commando “AT+CPOWD=1” en de PWRKEY-pin.

Daarom is de meest correcte manier om de module opnieuw op te starten, het volledig uitschakelen van de stroom (van de VBAT-pin), wachten op een pauze (minstens een seconde voor het geval dat) en de stroom weer inschakelen. Om de module opnieuw op te starten, is het beter om een ​​relais- of transistorschakelaar op de kaart te plaatsen, bestuurd door de controller.

Conclusie

In de toekomst ben ik van plan een reeks artikellessen uit te brengen waarin ik je zal vertellen hoe je een uitwisseling tussen een serverwebapplicatie en SIM900 kunt organiseren, te beginnen met het kopen van hosting bij een provider en eindigend met het schrijven van besturingsprogrammacode.

Tot ziens! Blijf op de hoogte voor updates over LUIM SLIM .