curtpw / nRF5x-device-reverse-engineering

nRF52/nRF51 Fitness Trackers & Smartwatches Reverse Engineered for use as a Wearable Device Development Platform
254 stars 43 forks source link

Debug Page Switching/Addressing for SSD1331 OLED driver #4

Open curtpw opened 6 years ago

curtpw commented 6 years ago

Right now I'm exclusively using the SSD1331 low-level line drawing function for the OLED display. When I attempt anything more complicated the first page (horizontal section/row) of the OLED works fine but nothing shows after. I think the SSD1331 ICs in these hacked devices may have slightly different addresses from what is standard.

Currently using this library ( https://github.com/lexus2k/ssd1306 ) for the display.

wassfila commented 6 years ago

Hi, I tried to have a look at this, I installed the same mentionned repo library but got an issue compiling nrf52_X9Project_HACKADAY.ino: Arduino\libraries\ssd1306\src/ssd1306_hal/arduino/io.h:45:27: fatal error: avr/sleep.h: No such file or directory looks like the default library version is not bydefault patched for the nRF52. I'm not much used to Arduino, it's either me or the dependencies integration system is not that clear. Did you modify that repo or did I miss a step in the install ?

curtpw commented 6 years ago

You're correct, lexus2k's OLED library is written to support a variety of AVR, ARM and ESP devices. I modified io.h by commenting a lot of the cruft for other devices out. I've forked lexus2k's library and added those modifications: https://github.com/curtpw/ssd1306-nRF5 Any further improvements to nRF5x device support will be added to that repository. I have also added this library to the common libraries directory of this repository: common --> libraries --> ssd1306-nRF5 This should solve your problem, please let me know if it doesn't.

wassfila commented 6 years ago

Now it's compiling, I got a hex, but not out of the box, see this pull request. Not sure, probably something was mismatching with your local version still. By the way I got a CK18 today with ECG+PPG, but it asked for so many access on my phone that I decided not even to test the smart phone app, that might end up as a test casualty.

curtpw commented 6 years ago

Looks good. I just posted a couple OLED examples for the X9. I still haven't had a chance to do a real port of Lexus2k's library so I created a really simple 'bitmap' font embedded in the examples. Please keep me updated on the CK18. I've had one taken apart and wired up for a few months (the one I took all the microscope images of) but haven't had the time to really mess with it. I'm planning on doing a tutorial on ECG activity trackers later in the summer. These all use the ADS1292 ECG front end from Texas Instruments. Once you hack the ECG front end its all about getting frequency domain data. The most challenging part will probably be getting really solid FFT working with the Arduino style code. I assume whatever Chinese firmware developer wrote the original code used the nRF52's ARM-Cortex M4 built-in native FFT via the CMSIS DSP math library.

wassfila commented 6 years ago

Thanks for the info, my CK18 project is a bit postponed, but for the same sake of the nRF52, I'm working on the basis as the example seen in this readme, where I try to master the art of pogo-pin 3d printed adapters, actually my goal would be not to add HW but to close it back after having added a DFU bootloader, the rest could be wirelessly updated. I'm also porting my mesh protocol to the nRF52, my goal is to have the smart watch as a node in the mesh, and then stream the signal even to the server where real machine learning and processing could run. My HomeSmarMesh project does not case about cases where there's no server close by. So either motion or why not ECG signal, I'll check if it wouldn't be within the bandwidth that can be simply transmitted raw, or would that be a bad idea ? I would like to avoid spamming your SSD1331 issue so you can answer me in another mail if you prefer.