Page 1 of 1
Need guidence in implementing ESP8266+MPU6050
Posted: Sun Jul 19, 2020 9:44 am
by bukaida
I need to collect the 6DOF accelerometer+Gyroscope data from ESP8266+MPU6050 combo, via a python server which will display the value of Ax,Ay,Az and Gx,Gy,Gz along with UNIX timestamp and also stores them in a file as json with the format like
Code: Select all
{"aX": "-1.532289", "aY": "9.739613", "aZ": "0.5746084","gX": "9.865169", "gY": "-3.9590178", "gZ": "-0.7498371" }
{"aX": "-1.8291701", "aY": "9.701305", "aZ": "0.58418524", "gX": "3.1838295", "gY": "2.5143213", "gZ": "-4.4101415"}
with some kind of noise pre-processing on the device is required. An UDP server will be ideal as acknowledgement is not required, speed is more important. Is it possible to control number of data/second in WiFi ? The transfer speed should atleast be 40 records/second ( I have no idea about the default transfer speed of ESP8266+MPU6050 combo).
I am trying with
https://github.com/micropython-IMU/micropython-mpu9x50 and
https://github.com/micropython-IMU/micr ... -fusion both by Peter. However, not sure if the code of mpu9x50 will work on MPU6050. Giving it a try.
Re: Need guidence in implementing ESP8266+MPU6050
Posted: Sun Jul 19, 2020 10:19 am
by pythoncoder
If you read the docs you will see that both modules have been tested with MPU6050. Naturally sensor fusion is limited when the device has no magnetometer: it can deduce yaw and pitch, but not heading.
Re: Need guidence in implementing ESP8266+MPU6050
Posted: Sun Jul 19, 2020 7:11 pm
by bukaida
I have downloaded the fusion based code from
https://github.com/micropython-IMU/micropython-fusion. I have few doubts before trying to implement it on ESP8266+MPU6050 as the readme file seems to be written for a bit advanced level users. In it's present form--
1. will it work over WiFi ?
2. For 6DOF MPU, which one should I use? Synchronous version or Asynchronous version?
3. Which one is the program to be run on Desktop python prompt and which one on ESP? This project
https://github.com/peterhinch/micropython-iot has a much easier instruction for implementation. There is no such implementation instruction for noobs like me for the current one.
4. will the file capture.py under remote folder be run as client?
Please help.
Re: Need guidence in implementing ESP8266+MPU6050
Posted: Mon Jul 20, 2020 8:34 am
by pythoncoder
Your client (the ESP8266) is physically connected to the MPU6050. The simplest approach is where it performs the fusion and sends the results to the server using the IOT interface. I recommend the asynchronous version as the IOT code is asynchronous. I suggest you adapt and run the test program
fusiontest_as6.py which is for the MPU6050. It will need to be adapted for the ESP8266: in
this line instead of the string 'X' you will need to pass an initialised I2C instance.
There is a question mark over how well this will work on ESP8266 as the fusion code is maths intensive. One option may be to use frozen bytecode to reduce RAM use. Another option is to perform the fusion on the server, this is discussed
in this doc. In essence you send the IMU data plus a precision timestamp to the server (over the IOT interface) and the server runs the fusion code. A final option is to use an ESP32 or (even better) a Pyboard D.
I'm afraid this isn't an easy beginner project. Asynchronous programming, sensor fusion, client/server operation and frozen bytecode all present rather steep learning curves. You will need patience, determination and a willingness to experiment and to read documentation. Good luck

Re: Need guidence in implementing ESP8266+MPU6050
Posted: Mon Jul 20, 2020 9:38 am
by bukaida
Ok , fusion on ESP seems to be complicated. At present it will be sufficient for me to accept 3 axis accelerometer and gyroscope data in json format at the python server running on desktop, connected to ESP via WiFi. Any suggestion for this?
Re: Need guidence in implementing ESP8266+MPU6050
Posted: Tue Jul 21, 2020 7:11 am
by pythoncoder
Taking as the starting point the
c_app.py demo you'll need to add the following imports. Ensure your I2C is instantiated with the correct pins and change the writer code as below. This will send [[accel_x, accel_y, accel_z],[gyro_x, gyro_y, gyro_z]] every five seconds.
You'll need to adapt the server code to accept this JSON data and to do with it whatever you intend.
Code: Select all
import ujson
from machine import I2C
from imu import MPU6050
i2c = I2C(<your args>) # Adapt for your physical connection
imu = MPU6050(i2c)
# User coro returns data and determines update rate.
# For 6DOF sensors two 3-tuples (x, y, z) for accel and gyro
async def writer(self):
self.verbose and print('Started writer')
while True:
gc.collect()
data = (imu.accel.xyz, imu.gyro.xyz)
print('Sent', data, 'to server app\n')
await self.cl.write(ujson.dumps(data))
await asyncio.sleep(5)
Re: Need guidence in implementing ESP8266+MPU6050
Posted: Thu Jul 23, 2020 7:35 am
by bukaida
Will this run on ESP or Desktop or both?