Getting started with LOLIN D1 mini/DHT22 on Mac

By Atomstar on Thursday 20 December 2018 16:06 - Comments (5)
Categories: ESP8266, Smarthome, Views: 1.606

To augment my smarthome hub and feed it with more data, I'm experimenting with LOLIN ESP8266 boards from WeMos. Specifically, I have the LOLIN D1 mini Pro v2.0.0. In this post I document how I overcame some hurdles in getting this to work. See also this WeMos tutorial.

Choosing the right board

There is a wide range of ESP8266 boards available, I choose the WeMos D1 mini pro v2.0.0. Note that the versions are relevant, as there are subtle improvements between them. Alternatively to WeMos, there is also the Adafruit Feather Huzzah.

Setting up environment

Enable VCP (Virtual COM Port)
To connect to the D1 mini pro on a Mac (and possibly other systems), one needs a Virtual COM Port to facilitate host communication. There appear to be two versions (mine had a CH340C):
  1. Winchiphead CH340 (CH340C/CH340G): Get winchiphead 340c drivers for Mac here.
  2. Winchiphead CP2104: Get drivers from Silicon Labs.
Install drivers
For both drivers, installation is similar:

Ensure the kext is installed:
ls /Library/Extensions/ | grep -i silab
If not, manually approve loading of the module, optionally copy the file manually.

Ensure the driver is loaded (note: this kext will load dynamically, and might not show up if the ESP8266 board is not connected):
kextstat | grep -i silab
If not, load manually to debug for errors:
sudo kextutil /Library/Extensions/SiLabsUSBDriver.kext

Ensure the serial port is created:
ls /dev/cu.*
If not, ensure you are using a micro usb cable supporting data (i.e. not power only).

If this does not work, see this reddit comment for help, some common issues and solutions:

Arduino IDE
I use the Arduino IDE to develop on the ESP8266 board. For this you need an additional esp8266 board manager:
  1. Install board manager.
    1. Start Arduino and open Preferences window.
    2. Enter http://arduino.esp8266.co...age_esp8266com_index.json into Additional Board Manager URLs field. You can add multiple URLs, separating them with commas.
    3. Open Boards Manager from Tools > Board menu and install “esp8266" platform.
  2. Select Board “WeMos D1 R2 & mini”
  3. Select port /dev/cu.wchusbserial14140 (depending on USB to serial chip, i.e. board version)
I have these settings for connecting to the Lolin board:
Arduino settings for connecting WeMos/Lolin D1 mini pro v2.0.0 board

Run test program

Once the hardware/software infrastructure is set up, it's time to run the first program.

Download D1 mini examples
There is a GitHub repo with D1 min examples. Install this in your Arduino folder:
cd ~/Documents/Arduino
git clone https://github.com/wemos/D1_mini_Examples.git

Open the Arduino IDE, the examples should show up under File -> Sketchbook -> D1_mini_examples.

Run the fade program
A simple example program drives the LED on and off in a fading manner. Because all the hardware is already connected, you can't do anything wrong with pins yet.
  1. Load the examples from File -> Sketchbook -> D1_mini_examples -> 01.Basics -> Fade.
  2. Upload the example program to the D1 mini: click the arrow or press Apple-U.
  3. The D1 mini should now start fading the led in and out (±2 sec/cycle)
If this doesn't work, ensure all the USB/VCP settings are correct as explained above.

Fun fact: the intensity is fading linearly while your eyes have a logarithmic response, which explains why the apparent 'speed' of the fading is not linear. Challenge: improve the example such that the apparent fading is linear across the intensity range.

Reading out DHT22 temperature/humidity sensor

The DHT22 sensor is a combined temperature and humidity sensor. I have one with a pull-down resistor pre-soldered onto a PCB, such that I have three pins: DAT, VCC, GND.

Connecting the DHT22
It seems each pin on the D1 mini has a hundred names, which utterly confused me at first. It works as follows.
  • Connect DAT to port 4 = SDA on the D1 mini, which is D2 in the Arduino IDE.
  • Connect VCC to 3.3V
  • Connect GND to Ground

Reading out temperature
Fortunately, there are many example programs which you can get directly from the Arduino IDE under "Tools -> Manage Libraries...". Search for DHT and install one you like. I used the 'DHT Sensor library' v1.3.0 by Adafruit and 'DHT sensor library for ESPx' v1.0.9 by beegee_tokyo.
  1. Open a DHT example program (from File -> Examples -> <Library name>), DHT_Unified_Sensor from Adafruit or DHT_ESP8266 from beegee_tokyo.
  2. In either example, ensure you set the connected pin to D2 or 4 (these are identical).
  3. In the Arduino IDE, open the serial monitor and ensure the baud rate setting (bottom of the window) is the same as the baud rate in the example.
  4. Finally, upload the program as before, and the serial monitor should show the temperature and relative humidity. Hooray!

Volgende: Measuring CO2 using MH-Z19B and D1 mini pro 20-12 Measuring CO2 using MH-Z19B and D1 mini pro
Volgende: Connecting sensors to Rpi (2/3) 02-12 Connecting sensors to Rpi (2/3)

Comments


By Tweakers user RobIII, Thursday 20 December 2018 17:53

For the love of God, use Visual Studio Code + PlatformIO. Thank me later.

("Reading out" is niet "uitlezen" ;) )

[Comment edited on Thursday 20 December 2018 17:54]


By Tweakers user sebastius, Thursday 20 December 2018 23:34

En als we dan toch ongevraagde kritiek geven: trakteer jezelf op de BME280 chip. Luchtdruk, luchtvochtigheid en temperatuur, en beter/betrouwbaarder dan de DHT22 :)

En laat je niks wijs maken over PlatformIO. Hipsterplatform dat zichzelf opdringt en schaamteloos zichzelf adverteerd met het platform.io bestandje dat je verplicht moet hebben om het compatible te laten zijn. Dat is geen technische keuze, dat is puur marketing. Zelfs Arduino is niet zo gehaaid.

By Tweakers user RobIII, Saturday 22 December 2018 18:15

sebastius wrote on Thursday 20 December 2018 @ 23:34:
En laat je niks wijs maken over PlatformIO. Hipsterplatform dat zichzelf opdringt en schaamteloos zichzelf adverteerd met het platform.io bestandje dat je verplicht moet hebben om het compatible te laten zijn. Dat is geen technische keuze, dat is puur marketing. Zelfs Arduino is niet zo gehaaid.
Ik heb werkelijk waar geen idee waar je 't over hebt. Als je doelt op 't platformio.ini bestand met deze (dergelijke) inhoud:

code:
1
2
3
4
5
6
7
8
9
10
[env:d1]
platform = espressif8266
board = d1
framework = arduino
upload_speed = 921600
monitor_speed = 115200 

lib_deps =
  DHT sensor library
  ...


...wat is dan in hemelsnaam 't probleem? Dat er platformio in de bestandsnaam staat :? Hoe is dat anders dan een travis.yml of foo.csproj of whatever? Ik denk dat je een hoop poeha maakt om niks.

Je kunt zeggen wat je wil maar VSCode + PlatformIO start in ieder geval al een factor 50 sneller op dan "Arduino IDE", los van 't feit dat 't verder nog intellisense biedt, veel sneller en intelligenter compiled (omdat alleen wijzigingen opnieuw compiled worden i.p.v. elke keer domweg de hele zwik opnieuw te compilen), fatsoenlijke en degelijke code formatting en syntax highlighting, errors die je kunt aanklikken en naar de juiste regel sturen (en code-navigation a-la "go to definition" enz.), multi-monitor support en überhaupt een GUI die te configureren is, ondersteuning heeft voor verschillende keybindings en ga. zo. maar. door. De lijst is eindeloos. En don't get me started over "File -> New" behaviour in "Arduino IDE" (en überhaupt alles wat met files te maken heeft) want dat is vérre van 'normaal gedrag' in willekeurig welke andere applicatie dan ook. En dan heb ik 't nog niet gehad over de dramatische 'library manager' en 'platform manager' van "Arduino IDE" gehad; dat gedrocht is al helemaal om van te huilen, laat staan de manier waarop dependencies in een project (volgens "Arduino IDE" methode) beheerd 'moeten worden'. Het spul is niet vooruit te fikken en lichtjaren achter op de manier waarop je dependencies in PlatformIO toevoegt: je mikt de naam in de platformio.ini file en klaar OF je plaatst je dependency in een subdirectory naar hoe 't JOU blieft en niet hoe je IDE 't wil hebben omdat 'ie 't anders niet snapt. Wat een lacher.

Ik zie werkelijk niet één reden om Arduino IDE te verkiezen boven mijn suggestie. Het is marginaal beter dan Notepad en daar heb je alles mee gehad.

Ik lees wel veel negatiefs over PlatformIO + Atom maar die combinatie heb ik nooit geprobeerd; ik heb 't hier specifiek over de VSCode combinatie.

Je mag het 'hipster' vinden maar als dat zo is dan so be it. Who the hell cares? En als je enige andere argument dan is dat er een platformio.ini bestandje in je project directory staat (waar je misschien nog wel zonder kunt, geen zin om uit te zoeken), like, who-cares, het is niet alsof je 't überhaupt nog ooit terug ziet in de output enzo, dan denk ik dat er geen spaan over is van je argument, wel?

[Comment edited on Saturday 22 December 2018 18:36]


By Tweakers user RobIII, Saturday 22 December 2018 18:44

Overigens: in de blog staat "Lolin (formerly called WeMos)" is volgens mij fout. Correct me if I'm wrong maar Lolin is de ('retired') naam van een ('retired') module; WeMos is de naam van 't bedrijf die die dingen maakt.

[Comment edited on Saturday 22 December 2018 18:45]


By Tweakers user Atomstar, Monday 24 December 2018 12:54

Thanks, however the programming environment is by far not my bottleneck at the moment ;)
RobIII wrote on Saturday 22 December 2018 @ 18:44:
Overigens: in de blog staat "Lolin (formerly called WeMos)" is volgens mij fout. Correct me if I'm wrong maar Lolin is de ('retired') naam van een ('retired') module; WeMos is de naam van 't bedrijf die die dingen maakt.
I think we're both partially correct: WeMos is indeed the company, LOLIN is the name of the boards (which were nameless or had 'WeMos' on them before, see D1 mini pro v1 vs v2). The retired boards you're linking to are only the LOLIN32 boards.

Comment form
(required)
(required, but will not be displayed)
(optional)