WeMOS

Fra HTX Arduino
(Omdirigeret fra Kategori:WeMOS)
Spring til navigation Spring til søgning
WeMOS WiFi Processor
WeMOS Server Connection - Simpel Server - Flere SSID - ESP8266 - Watchdog - Interrupt
Anvendelse LED-eksempel - AD-eksempel - Mail - POST metode - Web Publicering
WeMOS processor Board
WeMOS processorbord layout som en UNO

WeMOS[1] er en serie af Arduino produkter baseret på ESP8266 processor der indeholder et WiFi modul.

Der er her ved siden af listet en række eksempler på anvendelser af WeMOS til at løse mindre ting, som hver især kan være sin egen lille Internet of Things, og der er lavet små eksempler på hvordan man kan kommer på WiFi ved hjælp af et lokalt netværk, eller ved at man har en fast IP-adresse på netværket.

Installation

Dette afsnit er til dels beskrevet ud fra en beskrivelse på instructables.com[2].

Man skal have Arduino Udviklingsmiljø installeret til at skrive, oversætte og uploade koden med, og for at den kan arbejde med WeMOS-ESP8266 processoren, så skal de have installeret den del, der kan forstå det.

Det er dog vigtigt at man har installeret den rigtige version af Arduinos IDE, da det ellers ikke er sikkert at den kender ESP8266 processorerne, og at man giver en reference til . For Windows er det fra version 1.8.5 at den kender det, mens den på skrivende tidspunkt ikke kender det til MAC, så man derfor er nødt til at lave en manuel installation.

En anden betingelse er at man har installeret den driver der kan håndtere den serielle port der sidder i USB-forbindelsen. Til de WeMOS D1 mini Pro vi har på Holstebro HTX er det enten CP2104 eller CP2102 drivere[3] der skal installeres - se link i referencer.

For at Arduino IDE'et kan genkende Wemos'en skal den vide hvor den skal finde oplysninger om processoren, så skal man give IDE'et en sti til det. Det gør man inde under Fil - Egenskaber, hvor man skal angive en Additional Boards Managers URLs: til følgende:

http://arduino.esp8266.com/stable/package_esp8266com_index.json 

Dette ser ud son vist her:

Henvisning til Installation af WeMOS
Henvisning til netkilde med ESP8266 til WeMOS

Man skal vælge Værktøjer - Board: - Boards Manager... og så finde ESP8266 - evt ved at søge. Ved at klikke i den relevante processer kan man komme til at klikke install som vist her:

Installation af WeMOS
Installation af ESP8266 compiler til at oversætte til WeMOS

Dette installerer både oversætteren og en del biblioteker man kan anvende til WiFi kommunikation.

Hvis man ikke kan fremsøge en installation der dækker WeMOS, så kan man prøve at reinstallere Arduino IDE'et med den nyeste version, eller man kan installere den manuelt.

For at Arduino IDE'et kan forstå WeMOS'en skal man kunne henvende sig til nogle biblioteker. Disse skal installeres ved at vælge Sketch - Include Library - Manage Libraries, hvor man så kan finde ESP8266 Microgear som vist her:

Installation af WeMOS Biblioteker
Installation af WeMOS biblioteker

Når man har installeret det, så kan man tage et simpelt Blink eksempel og tilføje følgende indcludes i toppen af filen:

#include <AuthClient.h>
#include <debug.h>
#include <MicroGear.h>
#include <MQTTClient.h>
#include <PubSubClient.h>
#include <SHA1.h>

Manuel installation

For installere manuelt skal man have fundet en version af den som fx. Github ESP8266 Arduino installationen der kan hentes som en ZIP-fil.

ZIP-filen indeholder mappen Arduino-Master, der skal kopieres ind under Dokumenter - Arduino - Hardware, så det kommer til at have følgende struktur:
Strukturen over hvordan Arduino-master skal placeres
Strukturen over hvordan Arduino-master skal placeres

Efter mappen er lagt ind skal Arduinos IDE genstartes.

Mac-installation

Første step i installationen på Mac, er at downloade den nyeste version af Arduinos IDE. Link til Arduinos officielle side.

Det næste step er at gøre IDE'en kompatibel med WeMos-boards. Dette gøres på følgende måde:

Åbn preferences eller indstillinger for Arduino IDE'en. Klik på "Arduino" oppe i venstre hjørne af skærmen, når du har Arduino IDE'en åben, og klik videre på preferences/indstillinger:

Step2.png

Herefter skal du tilføje et link, så IDE'en kan hente WeMos-board-informationerne online. Dette gøres i feltet "Additional Boards Manager URLs". Her skal følgende link indsættes: "http://arduino.esp8266.com/stable/package_esp8266com_index.json".

Step3.png

Genstart nu IDE'en.

Du kan nu installere understøttelsen af samtlige WeMos-boards. For at gøre det, klik på stien Tools -> Board: "xxx" -> Boards Manager.

Step4.png

Du skal nu finde ESP8266-pakken. Denne findes hurtigt ved at indtaste "esp" i søgefeltet.

Step5.png

Vælg nu den nyeste version og klik install.

Step6.png

Din IDE genkender nu alle WeMos-boards, men dine USB-porte kan stadig ikke genkende WeMos. Dette giver et problem, da der så ikke kan uploades til boardet. Der skal derfor downloades en driver, der hedder CP210x USB to UART Bridge VCP Driver. Denne kan findes til Mac på Silabs hjemmeside. Dog kan en fungerende driver også hentes fra denne ZIP-fil, i tilfælde af at hjemmesiden ikke virker når du læser dette.

Sidste step i processen er at downloade Arduino-biblioteket "ESP8266wifi", der gør det nemt at arbejde med WeMos'ens WiFi-funktioner. GitHub-link til sidste version af biblioteket.

Genstart nu din Arduino IDE og muligvis din computer.

Din Mac er nu klar til at arbejde med WeMos. :)

Forsyning

Når man arbejder på udviklingen, så forsynes WeMOS fra USB'ens +5V, men selve processoren arbejder på 3,3V, og kan ikke tåle mere. De 3,3V laves af en regulator der sidder på WeMOSen.

Hvis man vil arbejde uden en computer tilsluttet, så skal WeMOSen selvfølgelig stadig have forsyning, og her kan man vælge at forsyne med 5V ind på 5V benet, eller man kan forsyne direkte med 3,3V på det ben. Regulatoren kan ikke tåle over 6,5V.

Diagram

WeMOS findes i mange forskellige opkoblinger, men den der er taget udgangspunkt i denne dokumentation er WeMOS D1 mini Pro, med følgende diagram som PDF.

Diagram over en WeMOS D1 mini Pro
Diagram over en WeMOS D1 mini Pro

Fordeling af ben på WeMOS'en

Der er en række begrænsninger på hvad benene kan. Det er svært at finde solide oplysninger fra producenten af både WeMOS boardet såvel som ESP8266 processoren, så derfor må man forlade sig på hvilke erfaringer andre har gjort sig[4]

Her er et kort overblik over benforbindelserne på en WeMOS, der også passer på en WeMOS D1 mini Pro:
WeMOS processorbord layout med benforbindelser
WeMOS processorbord layout med benforbindelser

Her er en oversigt over de forskellige ben, med kommentarer til forbehold og betingelser for de enkelte ben.

WeMOS ben Ben nummer Særlige forhold
D0 16

Kan ikke håndtere interrupts, PWM, I²C, one-wire
Hvis man vil anvende deepSleep-funktionen, så kobles dette ben til Reset - det gør at WeMOS'en bliver resat efter deepSleep-tiden er udløbet.
Når man vågner fra deepSleep ser det ud til at ram-indholdet er slettet, så hvis man skal huske noget fra gang til gang, så skal man lagre det i EEPROM eller i en batteri-backup'et RAM som fx i et RTC-modul.

D1 5

Default I²C SCL, funktionen kan flyttes til andre ben, men det er smart at reservere D1 og D2 til I²C funktion. Hvis dette ikke er nødvendigt, så kan benet anvendes til PWM eller interrupt.

D2 4

Default I²C SDA, funktionen kan flyttes til andre ben, men det er smart at reservere D1 og D2 til I²C funktion. Hvis dette ikke er nødvendigt, så kan benet anvendes til PWM eller interrupt.

D3 0

WeMOS kan etableres med intern 10k pull-up, Anvendeligt til I²C.

Anvendes i booting/flashing, Benet må ikke forbindes til GND/Vcc. Internt er der pull-down. Det er bedst at anvende benet som output - anvendes det som input, så man passe på at der trækkes ned gennem en modstand, for at WeMOS kan programmeres.

Efter reset/programmering, så kan benet bruges som både input og output. Under reset skal det helst svæve (være koblet til en indgang).

D4 2

Tilsluttet den indbyggede LED - Lyser, når Output sættes LOW.

WeMOS kan etableres med intern 10k pull-up, Anvendeligt til I²C.

Anvendes i booting/flashing, Benet må ikke forbindes til GND/Vcc. Internt er der pull-up. Det er bedst at anvende benet som output - anvendes det som input, så man passe på at der trækkes ned gennem en modstand, for at WeMOS kan programmeres. Trækkes benet lav ved reset, så starter WeMOS'en ikke.

Efter reset/programmering, så kan benet bruges som både input og output. Under reset skal det helst svæve (være koblet til en indgang).

D5 14

Hardware SPI clock.

Anvendes fint til andre ting - PWM og interrupt eller software I²C.

D6 12

Hardware SPI MISO.

Anvendes fint til andre ting - PWM og interrupt eller software I²C.

D7 13

Hardware SPI MOSI.

Anvendes fint til andre ting - PWM og interrupt eller software I²C.

D8 15

Wemos har 10k pull-down.

Er ikke anvendeligt til software I²C

Anvendes i booting/flashing, Benet må ikke forbindes til GND/Vcc. Internt er der pull-up. Det er bedst at anvende benet som output - anvendes det som input, så man passe på at der trækkes ned gennem en modstand, for at WeMOS kan programmeres.

Efter reset/programmering, så kan benet bruges som både input og output. Under reset skal det helst svæve (være koblet til en indgang).

Vil man koble et Liquid Crystal Display på, så er der noget med dette ben, som kan forhindre at WeMOS'en kommer ud af reset - hvad det er der sker er uklart. Følgende opsætning til LCD har fungeret:

LiquidCrystal lcd(D2, D1, D5, D6, D7, D0);

Er man i bekneb for ben, så kan D3 også anvendes - D4 kan bruges, men den sidder sammen med den indbyggede LED på WeMOS'en. Endelig hvis man er hårdt i bekneb, så kan man bruge RX og TX, men det "koster" så selvfølgelig at man ikke kan bruge Serial Monitor.

A0 A0

ADC input, 0-1 V på selve ESP8266kredsen.

0-3.3 V for WeMOS D1 mini og WeMOS D1 mini Pro (der har en spændingsdeler med 220k/100k modstande)

TX 1

Serial TX. Anvendes til Serial Monitor

Kan også anvendes som digitalt IO, hvis man ikke har brug for den serielle port eller Serial Monitor til debugging.

RX 3

Serial RX. Anvendes til Serial Monitor

Kan også anvendes som digitalt IO, hvis man ikke har brug for den serielle port eller Serial Monitor til debugging.

Digitale ind- og ud-gange

Der er 9 digitale ben på WeMOS, de kan benævnes D0-D8 - man kan også anvende tal det er valgfrit, men der er ikke en logisk sammenhæng. Som på Arduino kan man bruge følgende funktioner:

  • pinMode(pin, mode);
  • digitalWrite(pin, HIGH/LOW);
  • var = digitalRead(pin);

Der er ikke den samme begrænsning som på Arduinoen at man skal uden om 0 og 1 for ikke at blokere RX og TX på den serielleport - RX og TX ligger på helt andre ben. Til gengælde er der mange andre forbehold på benene - se tabellen med benfordeling ovenfor.

Der er dog et enkelt ben man skal håndtere lidt specielt - D4 - det skal helst fungere som output. Årsagen er at det indgår i programmeringen af ESP8266'eren, og derfor må man ikke sætte en udgang fra en IC ind på det ben, da det så vil blokere programmerings-processen. Hvis det er nødvendigt at anvende D4 som input, så er det vigtigt at det står med en pull-up for at programmeringen kan fungere.

Til gengæld er der andre ben man skal tage højde for, nemlig I2C benene SCK og SDA, der ligger på D1 og D2[5], og man skal ligeledes tage højde for SPI-bussens ben SCLK, MISO og MOSI, der ligger på D5, D6 og D7[5]. Der står også i kilden af SS ligger på D8, men den kan normalt flyttes valgfrit til SPI-enhederne.

Analog indgang

Der er kun en Analog indgang på WeMOS'en, der hedder A0. Den kan som på Arduinoen læses med analogRead().

Den analoge indgang giver et tal fra 1 - 1024 på en spænding fra 0 - 3,3V. Der er placeret en spændingsdeler med 220k og 100k på den analoge indgang for at tilpasse spændingsområdet - selve inputtet på ESP8266 har området 0 - 1V. Det gør også at indgangen kan tåle højere spændinger, men det giver ikke en udvidelse af området ud over 1024.

BEMÆRK - AD-konverteren inde i ESP8266 er en 10 bit AD, men af en eller anden obscur grund, så bliver der lagt en til tallet, således at maks-tallet 1024 er oppe i 11 bit. Det kan give problemer hvis man arbejder med datatyper der udnytter alle bit - fx hvis man skærer to bit af for at det kan være i en byte, så kan en byte rumme fra 0-255, og hvis man bare skærer to bit af og gemmer - der vil resultere i at værdien 1024 bliver til 0 i byten.
Løsning - for at få AD'en til at opføre sig som en normal 10 bit AD, så skal man lige trække en fra.

Det har ikke været muligt at finde valide kilder der angiver at området er således, men ved at teste WeMOS'en har det vist denne sammenhæng.

Analogt output (PWM)

Alle digitale ben på WeMOS'en kan fungere som PWM[6]. WeMOS'en er dog lidt anderledes end Arduino, da PWM-området er 10 bit.

Der skrives til udgangen med analogWrite(pin, value);

pin er den ben man ønsker at få den analoge værdi ud på, fx D2.

value er en værdi mellem 0 og 1023 (10 bits opløsning).

Seriel Port

WeMOS har en seriel port, der kan tilgås på benene RX og TX med almindelige digitale 3,3V asynkrone serielle signaler.

Porten kan også anvendes til Seriel Monitor via USB-seriel, forudsat man har den rigtige driver[3] installeret.

Reset

På en WeMOS er der et reset-ben, ligesom på en Arduino UNO, hvor man kan resette processoren (den starter forfra i koden). Signalet skal være lavt for at resette.

Der er også en knap man kan trykke på, så den resetter.

En WeMOS med et ben-layout som en Arduino UNO

Benene sidder noget anderledes, fordi WeMOS'en ikke har så mange ben.

Her er vist den anderledes WeMOS D1 mini Pro med Arduino UNO layout:
WeMOS processorbord layout som en UNO
WeMOS processorbord layout som en Arduino UNO

Her er en oversigt over de forskellige ben, med angivelse af nummer, og hvad der står på Arduino WeMOS boardet.

De særlige forhold kan læses i tabellen over.

WeMOS ben Ben nummer Ben betegnelse på WeMOS Arduino UNO layout
D0 16

D2

D1 5

D15/SCL/D3

D2 4

D14/SDA/D4

D3 0

D8

D4 2

TX1/D9

D5 14

D13/SCK og D13/SCK/D5

D6 12

D12/MISO og D12/MISO/D6

D7 13

D11/MOSI og D11/MOSI/D7

D8 15

D10/SS

A0 A0

A0 - resten ikke forbundet

TX 1

TX->D1

RX 3

RX<-D0

Problemer med upload af kode

Løsningen kan være følgende[7].

Tag WeMOS'en ud fra andre forbindelser og connect til USB-porten

  • Forbind D3 til GND
  • Forbind D8 til GND
  • Forbind D4 til 3,3V

Upload et tomt program til WeMOS D1 Mini Pro

Referencer

Arduino-Modul-Oversigt
Arduino Generelt: Biblioteker - Board - Driver - Shield - Arduino Analog - Arduino Seriel

Arduino-typer: Arduino UNO - Arduino Nano - Arduino Pro Mini - Arduino MEGA 2560 - LiliyPad Mikrocontroller - Arduino DUE - WeMOS

Input-moduler Trådløse: Bluetooth - Transceiver modul - WiFi Modul - SMS Modul - I2C-RF-modtager - RF Link - GPRS/GSM - GSM_Modul

Sensorer: GPS - Strøm-sensor - I2C Humidity - Lys og Nærhed - Magnetisk Kompas - I2C barometer - Farvegenkendelsesmodul - Alkoholsensor - Accelerometer - I2C Accelerometer - I2C Gyroskop - Vejecelleforstærker - IR Distance - AC Strømsensor - Afstand - XY Joystick - Humidity - Tryksensor - Vindhastighedsmåler
Photo og IR: IR Fjernbetjening - Photo Interrupter - IR Modtager - Bevægelsescensor - Photo Refleks Sensor - VGA Kamera
Power: Power Adapter - Lithium Batteri
Lager: SD Kort
Konvertere: I2C AD-konverter
Funktionsmoduler: RFID-modul - Matrix tastatur - DS1307 RTC - ENC28J60 Ethernet - IO Expander
Touch Display: Touch Display

Output-moduler Trådløse: Bluetooth - RF Link - GPRS/GSM - Transceiver modul - WiFi Modul - SMS Modul

Display: Display Shield - Touch Display - Arduino Display - Nokia 5110 Display - Dot-Matrix - Lys-avis - I2C Display
Funktionsmoduler: Lydgiver - Lydmodul - Relæ modul - Audio Power Forstærker - ENC28J60 Ethernet - Peltier Element - IO Expander
Hukommelse: SD Kort
Motorer: Stepper Motor Driver - Stepper med Accelleration - Servo

I2C-Moduler Funktionsmoduler: DS1307 RTC - I2C-RF-modtager - I2C tastatur

Sensorer: I2C Humidity - Magnetisk Kompas - I2C barometer - I2C Accelerometer - I2C Gyroskop
Konvertere: I2C AD-konverter
Display: I2C Display