- Vereiste materialen:
- Programmering van de PIC-microcontroller:
- Functies in ESP8266-bibliotheek:
- Voorbeeldprogramma:
- Simulatie-output:
- Uitgangsverificatie:
- Functies toevoegen aan de ESP8266-bibliotheek:
Laten we in dit artikel bespreken hoe we de WIFI-module ESP8266 kunnen koppelen met een PIC-microcontroller. Tot dusverre heb je de ESP8266-module misschien als een zelfstandige microcontroller gebruikt of heb je deze mogelijk met de Arduino-bibliotheek gebruikt. Maar als het gaat om hardcore embedded-systeemprojecten, moeten we weten hoe we het ook met PIC-microcontrollers moeten gebruiken. Dit zal u helpen om uw projecten in ontwerpperspectief aan te passen en het tegelijkertijd ook goedkoop te maken.
De ESP8266-modules worden geleverd met een standaardfirmware die erin is geladen, daarom kunnen we de module programmeren met behulp van AT-opdrachten. Deze commando's moeten via een serieel communicatiekanaal worden verzonden. Dit kanaal wordt tot stand gebracht tussen de PIC en de ESP8266-module met behulp van de USART-module in de PIC-microcontroller . De hele werking wordt gecontroleerd en gerapporteerd aan de gebruiker door middel van een 16x2 LCD-scherm. Daarom gaat deze tutorial ervan uit dat je enige basiskennis hebt over de USART-module in PIC, LCD-interface met PIC en het gebruik van AT-commando's in ESP8266. Als je dat niet doet, kun je terugvallen op de gekoppelde tutorials om ze van tevoren te leren.
Vereiste materialen:
Je hebt de volgende hardware nodig om deze tutorial te voltooien
- PIC16F877A
- 20 MHz kristaloscillator
- 7805
- LM317
- ESP8266
- 16 * 2 LCD-scherm
- PicKit3 programmeur
- Weerstanden (1K, 220ohm, 360ohm)
- Condensatoren (1uF, 0.1uF, 33pF)
- Doorverbindingsdraden
- 12V Adapter om de PIC- en ESP-module van stroom te voorzien
Hardware:
Het volledige schema van het project wordt hieronder weergegeven
Het schema bestaat uit twee spanningsregelaarcircuits, een is een + 5V-regelaar die wordt gebruikt om de PIC-microcontroller van stroom te voorzien en de andere is een 3,3V-regelaar die de ESP8266-module van stroom voorziet. De + 5V wordt geregeld met behulp van een 7805 (Linear Voltage Regulator IC). De 3.3V wordt geregeld met behulp van LM317 (Variable Voltage Regulator). De ESP8266-module verbruikt veel stroom (~ 800mA), dus als u uw eigen voeding ontwerpt, zorg er dan voor dat deze een dergelijke hoge stroom kan leveren. Zorg er ook voor dat de aardpennen van de PIC en de ESP8266-module met elkaar zijn verbonden.
Dus nu weten we dat de PIC werkt op + 5V en de ESP8266 op 3.3V volt. Om een USART-communicatie tussen deze twee modules tot stand te brengen, hebben we een 5V - 3,3V logisch omzetcircuit nodig, zoals weergegeven in de bovenstaande afbeelding. Dit circuit is niets anders dan een potentiaalverdeler die eenvoudig de inkomende + 5V omzet naar 3,3V. Dit zal voorkomen dat de 3.3V toelaatbare RX-pin van ESP8266 + 5V krijgt.
Ik heb de PIC- en ESP-modules op twee afzonderlijke prestatieborden gemaakt, zoals in deze tutorials wordt getoond. Op deze manier kan ik ze universeel gebruiken voor meer vergelijkbare projecten
- LED-hardware met behulp van PIC
- Aan de slag met ESP8266
U kunt hetzelfde volgen, of uw eigen bord in uw stijl bouwen of gewoon het bovenstaande circuit aansluiten op een breadboard.
Programmering van de PIC-microcontroller:
Om de PIC-microcontroller te programmeren om "AT-commando's" serieel met USART naar de ESP8266-module te sturen, hebben we een bibliotheek nodig. Deze bibliotheek zal u veel gedoe besparen, zoals het gebruik van de ESP8266-instructiemodules om te controleren op elk AT-commando en vervolgens een manier te vinden om ze naar de ESP-module te verzenden. Deze bibliotheek is gratis software die oorspronkelijk is ontwikkeld door Camil Staps en later is verbeterd en aangepast door Circuit Digest zodat deze kan worden gebruikt met onze PIC16F877A Microcontroller. U kunt deze hier downloaden
De bibliotheek is nog in ontwikkeling, maar u kunt de meeste belangrijke AT-opdrachten in de ESP8266-firmware gebruiken. Als u vindt dat een van de opdrachten die u nodig heeft, ontbreekt, laat het me dan weten in het commentaargedeelte en ik zal proberen het voor u toe te voegen. In deze tutorial worden alle commando's (tot dusver) uitgelegd die door deze bibliotheek kunnen worden gebruikt. Verder zal u ook begeleiden om uw eigen functies aan de bibliotheek toe te voegen.
Functies in ESP8266-bibliotheek:
- Initialize_ESP8266 (): Deze functie zal de USART-module van de PIC initialiseren om te communiceren met de ESP8266-module. Het stelt de baudrate in op 115200 en bereidt de Rx- en Tx-pin van PIC voor op USART-communicatie.
- _esp8266_putch (): Deze functie wordt gebruikt om een enkel teken serieel naar de ESP8266-module te sturen. Bijvoorbeeld, _esp8266_putch ('a') zal het karakter a serieel naar de ESPmodule sturen.
- _esp8266_getch (): Deze functie wordt gebruikt om een enkel teken uit de ESP-module te halen. Als de ESP bijvoorbeeld "OK" afdrukt en we gebruiken char a = _esp8266_getch (). Dan wordt het teken 'o' opgeslagen in de variabele a.
- ESP8266_send_string (): Deze functie is de stringversie van _esp8266_putch (). Het kan een complete string naar de ESP8266-module sturen. ESP8266_send_string ("AT / r / n") stuurt bijvoorbeeld het commando "AT" naar de ESP8266-module.
- esp8266_isStarted (): Het wordt gebruikt om te controleren of de PIC kan communiceren met de ESP-module. Het stuurt het commando "AT" en wacht op "OK" als het wordt ontvangen, geeft het true terug, anders geeft het false.
- esp8266_restart (): Reset de ESP8266-module en retourneert true, reset succesvol en retourneert false indien niet succesvol.
- esp8266_mode (): Wordt gebruikt om de werkmodus van de ESP8266-module in te stellen. Zoals we weten, kan het in drie verschillende modi werken.
Station-modus |
|
Zachte AP-modus |
|
Zowel Station- als AP-modus |
- esp8266_connect (): Hiermee kunt u verbinding maken met een wifi-signaal. Met esp8266_connect ("home", "12345678") kan uw module bijvoorbeeld verbinding maken met het wifi-signaal genaamd home met het wachtwoord 12345678.
- esp8266_disconnect (): Deze functie verbreekt je module van elke wifi-verbinding die eerder was verbonden
- esp8266_ip (): Haalt het IP-adres op en geeft het terug. Gebruik deze functie als u het IP-adres van de ESP8266-module wilt weten.
- esp8266_start (): Deze functie wordt gebruikt om een TCP- of UDP-communicatie te starten. Bijvoorbeeld esp8266_start ( "TCP", "192.168.101.110", 80) . Start een TCP-netwerk in dat IP en poort 80.
- esp8266_send (): Deze functie wordt gebruikt om informatie naar het TCP / UDP-netwerk te sturen. Met deze opdracht wordt het HTML-script verzonden. Dit script zal dan verschijnen in het IP-adres waarin de communicatie eerder tot stand is gebracht.
- esp8266_config_softAP (): Deze functie wordt gebruikt om de softAP te configureren. Bijvoorbeeld esp8266_config_softAP ("office", "12345678"); zal een wifi-signaal creëren met de naam office en het wachtwoord 12345678 moet worden gebruikt om toegang te krijgen.
- esp8266_get_stationIP (): Deze functie zal u het IP / MAC-adres teruggeven van de clients die zijn verbonden met uw softAP.
Voorbeeldprogramma:
Nu we de functies van elk commando in de bibliotheek hebben begrepen, kunnen we een klein voorbeeldprogramma bekijken. In dit programma zullen we controleren of de verbinding tussen ESP8266 en PIC succesvol is en vervolgens een WIFI-netwerk (SoftAP) creëren met een voorkeursnaam en wachtwoord. Het volledige programma en de simulatie hiervan worden uitgelegd voor uw begrip.
Nogmaals, als u onze PIC-interface met LCD en PIC USART-zelfstudie niet hebt gelezen, lees dan eerst de, voordat u verder gaat, want alleen dan is het logisch voor u.
Omdat we net begonnen zijn om PIC te koppelen aan de ESP8266, heb ik een LCD gebruikt om te controleren of alles goed werkt.
doe {Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP niet gevonden"); } while (! esp8266_isStarted ()); // wacht tot de ESP "OK" Lcd_Set_Cursor (1,1) terugstuurt; Lcd_Print_String ("ESP is verbonden"); __delay_ms (1500); Lcd_Clear ();
Wanneer we de "AT" naar de ESP8266-module sturen, antwoordt deze terug met een "OK". Dit zorgt ervoor dat de ESP8266-module succesvol is aangesloten. De functie esp8266_isStarted () wordt hiervoor gebruikt. We sturen het signaal AT van de PIC en we wachten tot de ESP-module tot leven komt en sturen ons een OK. Als we een OK krijgen, laten we zien dat de "ESP is aangesloten" op het LCD-scherm.
esp8266_mode (2); Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP ingesteld als AP"); __delay_ms (1500); Lcd_Clear ();
De bovenstaande regels code worden gebruikt om de ESP-module te laten werken in de "soft AP" -modus. De functie esp8266_mode (2); stuurt de AT-commando's "AT + CWMODE = 3" naar de module en wacht tot de module antwoordt met "OK"
/ * Configureer de AP-naam en het wachtwoord * / esp8266_config_softAP ("CircuitDigest", "619007123"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("AP geconfigureerd"); __delay_ms (1500); Lcd_Clear (); / * AP geconfigureerd * /
Dit deel van de code wordt gebruikt om de softAP te configureren. Hier hebben we de SSID "CircuitDigest" genoemd en het wachtwoord als "619007123". Om aan te geven dat het proces is voltooid, wachten we tot de module reageert met "OK" en drukken vervolgens de geconfigureerde AP af op het LCD-scherm.
Dat is het nu we de ESP8266-module hebben gekoppeld aan de PIC MCU en de softAP hebben geconfigureerd met een naam en wachtwoord naar keuze. Laten we zoals gewoonlijk deze code simuleren en zien hoe het werkt.
Simulatie-output:
We gebruiken de Proteus-software om de output te simuleren. Het ontwerpbestand hiervoor is te vinden in de bijlage.
Omdat we geen ESP8266-module in de Proteus-bibliotheek hebben, gebruiken we de seriële terminal en reageren we als gebruiker op de PIC-module. Het scherm met de simulatie na voltooiing ziet er als volgt uit
De output van onze code wordt getoond in de virtuele terminal. De volledige werking van de simulatie wordt in de onderstaande video uitgelegd.
Uitgangsverificatie:
Zodra het programma is geverifieerd met behulp van de simulatie, dumpt u het in uw PIC-microcontroller. Maak de aansluitingen zoals weergegeven in het bovenstaande schema (sectie Hardware). U zou uw voortgang moeten kunnen volgen via het LCD-scherm.
Zodra op het LCD-scherm staat dat het AP is geconfigureerd, kunnen we dat controleren met behulp van de wifi-instellingen in Telefoon of Laptop. Mijn laptop geeft het volgende signaal weer volgens ons programma.
Dat zijn het, we hebben met succes de ESP8266-module gekoppeld aan de PIC Microcontroller. Dit is een erg eenvoudige interface en als je ingewikkelde projecten wilt doen met de ESP8266, moet je misschien je eigen bibliotheken toevoegen of op zijn minst je eigen functies. Geloof me, het is heel gemakkelijk om dit te doen, ik zal een kort inzicht geven voor hetzelfde.
Functies toevoegen aan de ESP8266-bibliotheek:
Door uw eigen functie toe te voegen, kunt u elk "AT" -commando naar de ESP8266-module verzenden. Om hiermee door te gaan, moet u de instructiesetdocumentatie van de ESP8266-module lezen. U kunt direct elk AT-commando verzenden dat u in de handleiding van de instructieset vindt. Maar vergeet niet om "/ r / n" toe te voegen aan het einde van elk AT-commando. Bijvoorbeeld als u meerdere verbindingen met uw ESP-module tot stand wilt brengen. Open vervolgens de documentatie van de instructieset en zoek welke AT-opdracht deze taak voor u zal doen. Hier kunt u met het commando "AT + CIPMUX = 1" meerdere verbindingen tot stand brengen met uw ESP-module.
Nu hoef je alleen nog maar deze “AP + CIPMUX = 1” naar je ESP8266-module te sturen via de seriële poort. De hardcore manier om dit te doen is door simpelweg het commando te gebruiken
_esp8266_print ("AT + CIPMUX = 1 \ r \ n" ")
Dit zal werken, maar is niet de beste manier om het te doen. U moet teruglezen wat uw ESP8266 op uw commando reageert. In ons geval zal het reageren met "OK". U moet dus de inkomende gegevens van de ESP8266-module lezen en bevestigen dat het een "OK" is. U kunt deze functie ook maken waarbij de "1" of "0" als argumenten kunnen worden doorgegeven.
Ga je gang en probeer je eigen functies voor de bibliotheek te maken. Maar als je hulp nodig hebt, kun je het commentaargedeelte gebruiken en ik zal je helpen.