Started as one of hobby project for weather logging/monitoring and to get known
more with the Cortex-M4 core, FPU and DSP, plus driving LCD/RAM by EFM32 EBI.
Using different FW and change the connected/installed sensors device may
used for different applications, such as environment/agricultural monitoring,
portable weather logging, experiment control or even for SmartHome devices
control through mobile gateway application.
Now I’m looking for inspiration and motivation to continue and real world
Logger built on Wonder Gecko (EFM32WG380F256) (or Leopard Gecko for lower-price version) with BGM111 Bluetooth LE module. PCB size is 50x80mm.
Powered by 1200mAh Li-Po rechargeable battery (50x70x3mm) with charging from USB port.
Depending on modes can work up to several months without recharging.
There are different types of internally mounted and external sensors currently supported:
- Bosch Sensortec BME280 sensor for temperature/humidity/air pressure (I2C)
- SiliconLabs Si1133 UV and Ambient Light sensing (I2C)
- Avago APDS-9250 RGB, IR and Ambient Light sensor (I2C)
- NXP FXOS8700CQ 6-axis accelerometer and magnetometer (I2C)
- Akustica AKU143 analog HD voice MEMS microphone with audio amplifier
MCP6143 to ADC input
- Dallas/Maxim DS1820/DS18S20/DS18B20 1-Wire external temperature sensors through external jack connector to GPIO/ADC input
Data from sensors are captured by customizable time and algorithms and stored in
NOR FLASH memory and/or MicroSD card shared same USART in SPI mode.
Second USART in SPI is busy by BGM111 Bluetooth LE module communication for
talking with smartphone’s application. Sensors data sent by BLE custom services,
mobile app will store it and push to the cloud storage. Also device settings,
modes and parameters may be adjusted from the app.
Same functionality is doubled by USB port partially. Device supports USB as custom
HID device for controlling/data reading, and MSD device for accessing to MicroSD card.
FW can be updated via USB CDC bootloader. Window C# .NET application works with
logger via HIDSharp library.
EFM32 drivers 2.8” TFT LCD display module with ILI9341 controller from buydisplay.com.
Display is connected via EFM32 EBI by 8080 16-bit Parallel interface and support RGB 65K color at 320x240 resolution 16-bit width.
Same EBI interface is shared with 8Mbit Ultra Low-Power Pseudo CMOS static RAM for frame GUI buffers (ISSI IS66WV51216).
To the top of LCD screen capacitive touch screen is attached. It’s connected to the
MCU via I2C bus. LCD backlight is driven by PWM channel.
For keeping device current in sleep mode as low as possible RAM, TFT screen, MicroSD card
and MIC power can be turned-off by load switches.
Custom GUI is built around using of memory frame buffer on SRAM memory copying to
LCD screen by DMA. GUI supports software anti-aliasing and alfa-channel transparency,
some kind of custom controls and widgets.
Wonder Gecko Coretx-M4 core with hardware FPU significantly improves GUI performance.
Firmware is based on using FreeRTOS ver.9.0, gecko emlib and emusb,
Gecko BGLib + MCU as host, FatFS FAT file system library +
custom drivers for sensors and flash memory.
Things to do still:
- support for APDS-9960 proximity and gesture sensor for GUI control
- audio ADC conversion and spectrum analysis
- advanced scheduling for sensors data reading
- implement sleep modes and reduce current consumption
- develop mobile application and improve windows app, but it’s not my favorite area
- cloud service for data manipulations
- test LCD direct drive mode of EMF32 EBI
Sample GUI pictures:
I'm not sure about sharing complete project here because it's close related to HW. But some files will be attached here.