Introduction: Car Rasing--Python Application

A few weeks ago, I used Python to make a racing game when I was learning Python, but I didn’t want to use the keyboard to play it. This kind of game was not fun and difficult. Then I made a wireless control module with IMU and ESP32 that used it instead of a keyboard and gamepad to play the game. Now I will share it.




  • Python3
  • Visual Studio code
  • uPyCraft_v1.1

Step 1: Connection

Power the ESP32 via Micro USB or battery.

Step 2: Software on PC


  • You can download from here: Choose the 3.8.5 version,download and install it.
  • “Add Python 3.8 to PATH” the selection must be checked during the installation process, as Figure 1.

Visual Studio code

  • You can download the Visual Studio code from here: Install according to the installation wizard.
  • Open the Visual Studio code, and search for python under the Extensions page and install it, as Figure 2.
  • Open the Python file, click the button “Run Python in Terminal” on right to run the program.
  • Uncommon function libraries used by the program must be installed before running the program, as the following libraries:
import pygame
import time
import random 

It will prompt that some libraries are not installed after the program runs.

You can run the following command in cmd.exe to install and uninstall libraries:

pip install xxx   // xxx is library name
pip uninstall xxx   // xxx is library name
pip list    //   print installed libraries
  • After the library installation is complete, the python program can be exited and executed on the PC.


  • You can get the code from here:
  • The code is “\Project_IMU-Car-Racing\car_racing_py\”.
  • Setting UDP server
import socket
BUFSIZE = 1024
ip_port = ('', 80)
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # udp
  • Obtain and process the data received by the UDP server.
 	data,client_addr = server.recvfrom(BUFSIZE)
        #Return response information
        print('server reserve:',data)
        #Decoding the message
        data_str = data.decode('utf-8').encode('utf-8')
        #Strings are parsed into dictionary objects
        xyz = eval(data_str)
        #Parse the x and y angles
        imu_direct_x = int(xyz["x"])
        imu_direct_y = 0 - int(xyz["y"])
  • Fill in the address of the files completely to promise the program executed normally, as Figure 3.

Step 3: Firmware About ESP32


  • You can download from here:
  • On the official website of MicroPython, there are simple and typical application cases.
  • Connect the board to the PC by USB cable. Open uPyCraft_v1.1, select the tools:” Tool > board > esp8266” and “Tools > port > com*”, click the connected button on right. If the connection is not successful, the prompt will be shown as “open the serial error, please try again”. You have to update the firmware to promise the connection successfully. The firmware download link is Open “Tools>BurnFirmware”, set the parameter, as Figure 4, and click OK.
  • Open the Python file, and click the “DownloadAndRun” button on right. The program has been downloaded to the board, you can see it in the “device” menu on the left, as Figure 5.


SSID = "Makerfabs"      #Modify here with SSID
PASSWORD = "20160704"   #Modify here with PWD
  • Get your PC Lan IP and change the code in "/Project_IMU-Car-Racing/ESP32_mpu6050/workSpace/".
def main():
  ip_port = ('', 80)
  client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  • Receive and process the sensor data.
acc_data = accelerometer.get_values()
      temp =['AcX']/16384-error_x,5)
      temp_int = int(temp*10)
      xyz["x"] = temp_int
      temp =['AcY']/16384-error_y,5)
      temp_int = int(temp*10)
      xyz["y"] = temp_int
      temp =['AcZ']/16384-error_z,5)
      temp_int = int(temp*10)
      xyz["z"] = temp_int

  • Send data

text = str(xyz)
    data,server_addr = client.recvfrom(BUFSIZE)

Step 4: Operation

  • Connect the board to the PC by USB cable, and use uPyCraft to download all file in "/Project_IMU-Car-Racing/ESP32_mpu6050/workSpace".
  • Use the command line to run the file: “/Project_IMU-Car-Racing/car_racing_py/” as Figure 6. Click “GO” and reset eps32.
  • Tilting the IMU left and right to control the car position.
  • Tilting the IMU back and forth to control the car speed.

Step 5: Show