While the ESP32 sports a number of GPIO pins, not all are broken out on every board, meaning that sometimes a GPIO expander is necessary. This project is a simple design to test interfacing the ESP32 to an MCP23017 via the I2C interface.
There are so many tutorials on the MCP23017 that I won’t delve in depth into how it works, but I’ll point out a few features of the custom MCP23017 component that I’m developing as part of this demonstration project. If you need to get up-to-speed developing applications using I2C within the ESP-IDF environment, this tutorial from Luca Dentella is excellent and concise.
There are three main types of 4 digit seven segment displays to be found on the market:
Bare displays without any driver. These come in a variety of colors and with either decimal points or clock-type display with a colon dividing two sets of two digits.
74HC595-based displays. Usually these displays have two daisy-chained 74HC595 shift registers and rely on the host controller to fill the serial registers and handle the multiplexing. Depending on the processor speed, this ends up being a significant overhead.
TM1637-based displays. These displays reduce the burden on the host controller because all of the multiplexing is handled on the interface chip.
This post is about the TM1637 LED displays. The TM1637 datasheet is terrible, but fortunately there are several libraries for Arduino that provide a little insight into how others have managed to make this work. First things first, the communication protocol for this device is not I2C despite what vendors on Aliexpress frequently claim.
The thriving New York Times just published a list of questions being posed by Special Counsel Robert S. Mueller, III. What I found particularly interesting was his question about Trump’s intent behind his tweet on May 12, 2017 in which he said: “James Comey better hope that there are no “tapes” of our conversations before he starts leaking to the press!”
The question being posed by Mr. Mueller is insightful because it will require Trump to admit to the office of the Special Counsel that he was deliberately attempting to intimidate a party to a Federal investigation.
All in all, there are about 4 dozen questions for Trump, which means at least 48 lies.
Previously, I wrote about using the ESP32 to read sensor data over I2C from the Si7021 temperature and humidity monitor. Today, I’m going to briefly take you through the process of serving this data via the web.
The project plan is to connect to WiFi in STA mode, collect temperature and humidity data every 5 seconds from a Si7021 sensor via the I2C bus. We will launch a web server and whenever we have a GET/ request we’ll serve a simple web page that reports the temperature and humidity. If the URL path is /h (e.g. 192.168.1.x/h) then we’ll turn on an LED connected to GPIO 4. If the path is /l (e.g. 192.168.1.x/l) then we’ll turn off the LED. In both latter cases, we’ll also serve the same page showing the temperature and humidity.
Essentially, we have three tasks to consider:
Read sensor data from the Si7021 over the I2C bus. We covered this part previously; so I’ll only say that we’re using the same component and launching a periodic tasks to read the sensor.
Connect to the WiFi network
Configure and serve the web page incorporating the sensor data.
Recently I wrote about reading Si7021 temperature and humidity data using a Raspberry Pi. Now let’s try a completely different platform, the ESP32. This is essentially a project to explore using I2C on the ESP32 platform and to understand the build process.
Since we’re developing the Si7021 interface code as a reusable component, we need to structure our project in such a way that we can easily refer to it in our main code. Here’s how I structured this project:
One of the most infuriating UX choices on the web is the developer’s choice to open every single link in a new tab. There are a few sites I interact with, including Aliexpress, where the designers have inflicted this on the users.
Fortunately, I found a solution. The Chrome extension target="_blank"-toggler works well. When you hover over a link which would open in a new tab, it superimposes a visual signal. Now you have a choice. If you click on the link, it will open in a new tab. If you Command + Shift click, the link will open in the same tab. Problem solved.
The ⌘ + ⇧ combination works on macOS. It is probably CONTROL + Shift on Windows, but you'll have to check the documentation. ↩
The Heltec WIFI Kit 32 is an interesting little module that integrates a WiFi/MCU SoC and a small OLED display on a single board. If you want to set up the Arduino IDE to work with this device and you’re on macOS, this is for you. This particular ESP32 module has a number of impressive features: 240 MHz processor speed and 4 MB of flash memory. The onboard OLED display can be conveniently used for debugging.
Install command line development tools
If you haven’t already installed the command line dev tools, you’ll need to do so.
For some reason, I had to do this twice before it would install. It eventually succeeded.
Install the Arduino support files
1 2 3 4 5 6 7
mkdir -p ~/Documents/Arduino/hardware/espressif cd ~/Documents/Arduino/hardware/espressif git clone https://github.com/espressif/arduino-esp32.git esp32 cd esp32 git submodule update --init --recursive cd tools python get.py
With the last command python get.py I got an SSL error. I was able to workaround it but downloading the mkspiffs archive here. My target machine is still on 10.11, and I downloaded mkspiffs-0.2.1-osx.tar.gz. Then I just moved the archive (not unzipped) to ~/Arduino/hardware/espressif/esp32/tools/dist. Then I reran:
It still threw an error related to openssl, so I updated the Python distribution with Homebrew, and updated openssl:
brew install openssl brew install python
Then I was able to run get.py:
Now you’re setup to use the Arduino IDE to develop for this powerful little board.
Brutal piece by Adam Davidson about the pivotal role that the takedown of Michael Cohen plays in the unraveling of this disastrous presidency.
The narrative that will become widely understood is that Donald Trump did not sit atop a global empire. He was not an intuitive genius and tough guy who created billions of dollars of wealth through fearlessness. He had a small, sad operation, mostly run by his two oldest children and Michael Cohen, a lousy lawyer who barely keeps up the pretenses of lawyering and who now faces an avalanche of charges, from taxicab-backed bank fraud to money laundering and campaign-finance violations.
There are plenty of examples these days, from Moscow to Budapest, of how “democracies” can be manipulated to the point where they can yield only one result. This is Trump’s objective, and for it he needs a weakened Justice Department, a weakened press and an American public that will believe anything. He has had setbacks but is stubborn.
Trump’s toolkit is familiar. In it are the tools of every authoritarian brute everywhere. Americans are better than this, though.