This project implements a system that recognizes hand gestures from American Sign Language (ASL) and displays the corresponding letters on a 7-segment flip-dot display. The system includes three different implementation variants, with the final solution using an ESP8266 as a server that displays recognized gestures sent from a client.
A demonstration of the project can be viewed here: YouTube Video
- 4×7 segment flip-dot display
- RS-485 converter for communication with the display
- DHT11 temperature and humidity sensor
- ESP8266 microcontroller (final version)
- Raspberry Pi 4 (earlier versions)
- Camera for gesture recognition
- Neural network model for sign language recognition
- Communication protocol for the flip-dot display
- Server application for the ESP8266
- Client application for gesture recognition
Located in the rpi4_py_c directory. This implementation:
- Uses C for serial communication with the display
- Uses Python for gesture recognition with MediaPipe Hands
- Communicates between components via sockets
Located in the rpi4_py_only directory. This implementation:
- Handles both gesture recognition and display communication in Python
- Directly sends data through the serial port to the display
Located in the esp8266 directory. This implementation:
- Uses an ESP8266 as a server that connects to WiFi
- Handles communication with the display via RS-485
- Displays time, temperature, and humidity when in idle mode
- Accepts gesture data from any client over WiFi
- Shows animated welcome messages and visual feedback
The gesture recognition model:
- Was trained on ASL hand landmark data extracted using MediaPipe
- Uses 21 3D hand landmarks (63 features) as input
- Classifies 28 output classes (26 letters + delete + space)
- Is implemented using PyTorch
- Upload the code in
esp8266/server_gesturesto an ESP8266 device - Connect the ESP8266 to the RS-485 converter (TX to D2, RX to D3)
- Connect the DHT11 sensor to pin D5
- The server will display the device's IP address on startup
- Install dependencies:
pip install -r requirements.txt - Set the SERVER_IP and SERVER_PORT in
esp8266/client_gestures/client.py - Run the client application:
python client.py - Make hand gestures in front of the camera to send letters to the display
The flip-dot display uses a specific data frame format:
+-------+----------+---------+----------------+-------+
| 0x80 | Command | Address | Data | 0x8F |
+-------+----------+---------+----------------+-------+
- Header: 0x80
- Command: 0x83 (for 4x7 display)
- Address: 0xFF (broadcast)
- Data: 28 bytes (4 rows × 7 characters)
- Footer: 0x8F
Each character is represented by 7 segments, encoded in a single byte.
Michal Balogh (xbalog06)
