November 09, 2025, 12:58:22 AM

Recent posts

#21
UEXT / ESP32-PoE-ISO-16MB --> MOD-IO ...
Last post by swaff - November 01, 2025, 05:46:20 AM
I've got an ESP32-PoE-16MB connected to a MOD-IO via the included UEXT cable, and a BME280 plugged into the female UEXT on the MOD-IO board.

I'm having an issue where the humidity reading from the BME280 drops out. I've tried reducing the frequency and oversampling rate, but to no avail.

I'm wondering if anyone else has had a similar problem and can offer any solutions.

I do have a second BME280 sensor that I swapped out which didn't change anything.
#22
A20 / [Source][PoC] U-Boot + Kernel ...
Last post by son.nguyenhong - October 31, 2025, 07:38:00 PM
For along time ago, i had ordered a dozen of A20 Olinuxino Micro with 4GB NAND (Rev.D) for personal project. After done with that project all my board went straight to carton box. Last week, i cleaned my storage and found them again. Original, all boards  running Debian jessie. I want to make Debian Trixie run on that board but im not a dev. So with the help from Chatgpt now i can make it.
This is personal project, so i dont test much. Just a PoC.
Talk less, here the material
Source code available from github:
U-boot
Kernel 6.10.y - I dont know why i cant push origin source from kernel.org to github (maybe size too big to upload) so i pushed snapshot of 6.10.y You can take patch from my repo and apply on your source.

Im running the board with minimal Debian Trixie


Hope this help anyone that need newer linux like me on the old board that still rock!!! Thank you Olimex, that make wonderful dev board.
#23
A20 / Re: Unknown variant of A20
Last post by LubOlimex - October 31, 2025, 03:03:56 PM
This is a customized board for a company that used it in their 3D printer product. The board was used by Ultimaker in their printer products (search online there is a lot of info). This board is not sold via our shop or official distributors. It lacks power jack and SATA but it also has other modifications. The main thing is that this variant is made to be powered via the USB. We are not really familiar with the usage and requirements in their setup, so we can't tell you exactly what has to be done to revert it to the general-purpose usage, but be careful with the power jack, if you can power the board via the USB just use that and do not solder or attempt to use the power jack (since there are other changes like missing FETs and so on).

You can just use our latest Linux image or Armbian and it should work just fine (as long as you don't use the SATA and you power from externally powered USB). Check here:

https://raw.githubusercontent.com/OLIMEX/OLINUXINO/master/DOCUMENTS/OLIMAGE/Olimage-guide.pdf

I believe that this board has eMMC, not NAND.

The real revision G2 files can be found here (e.g. for the general-purpose version): https://github.com/OLIMEX/OLINUXINO/tree/master/HARDWARE/A20-OLinuXino-LIME2/2.%20Older%20hardware%20revisions/A20-OLinuXino-LIME2%20hardware%20revision%20G2
#24
A20 / Unknown variant of A20
Last post by extoprak - October 31, 2025, 11:45:16 AM
Hi all,

I am new here. I found a A20-OLinuXino-LIME2 in dumpster the other day and it looks good. I wanted to make a home network data folder with it, like simple folders shared over smb. Since this board has gigabit ethernet and sata, it can actually be fast data transfer (I expect).

I haven't tried to power up the board yet, I hope it works.

The problem is:

I cannot see the variant of the board on it, only text printed on it is :A20-OLinuXino-LIME2 revG.2 2017. It looks like having a NAND flash chip (I cannot read the text, mostly disappeared).

And following connectors are missing (with some components I won't bother to list)
3 power button, battery connector, power jack, SATA and SATA power connector, LCD pin header.. See the images please. It does not look like they were unsoldered.

Is this an unpopulated board? There is no info on the internet about it.

Will this work as it is? if I solder a power jack or try to power up from USB OTG?

I can see the caps in dataline of SATA are missing, okay I can solder some, but also the power circuit is missing for SATA, If I externally supply the SATA 5V and solder the caps, maybe it works?



#25
Neo6502 / neo6502 - apple ii emulation -...
Last post by decuser - October 31, 2025, 03:14:16 AM
Hi,

I'm completely new to neo6502. I am familiar with applewin, mame, etc for emulated apple ii systems. With these, I can point to a disk image (or two) and have them mounted and bootable. I'm not so sure about the neo. It seems able to boot the prodos image and a slew of games, but I'd like to boot merlin 8 and a blank disk to do assembly language programming using native tools in the apple ii environment. Is this possible?

Will
#27
New Product Ideas / RISC-V power boards
Last post by kerekesg - October 29, 2025, 10:11:49 PM
Would be cool to have an EU version of a milk-v Jupiter type board for more heavy workload on edge devices
#28
New Product Ideas / Re: ZX-Spectrum clone
Last post by RafaG - October 27, 2025, 07:53:29 PM
I wonder if it would be possible to emulate the ZX Spectrum (in any of its variants) on the Agonlight2.
#29
ESP32 / ESP32-P4 micropython port
Last post by kerekesg - October 26, 2025, 01:26:53 AM
Just in case anyone would need to run micropython on the ESP32-P4, you can get a build firmware from here:

https://codeberg.org/kerekesg/micropython-olimex-esp32-p4

AI helped me, but it works well on my Olimex ESP32-P4 board.
#30
ESP32 / Re: ESP32-H2-DevKit-Lipo - Bat...
Last post by LubOlimex - October 22, 2025, 10:42:00 AM
Yes, it is good and simple way to calibrate but you have to store to non volatile memory or it won't persist after restart (e.g. you have to calibrate every time). More advanced way would be using the espressif guide here:

https://docs.espressif.com/projects/esp-idf/en/stable/esp32h2/api-reference/peripherals/adc_calibration.html

Here is better Arduino IDE code that can be used to calibrate, store to nvm:

// ==========================================================
// ESP32-H2-DevKit-LiPo Battery and Power Sense Demo
// ----------------------------------------------------------
// External Power Sense: GPIO25
// Battery Measurement:  GPIO2
// User Button (BUT1):   GPIO9
// LED:                  GPIO8
//
// Resistor divider coefficient = (R5 + R1) / R5 = 5.7
// Maximum battery voltage = 4.2V
//
// ➤ Press BUT1 for 2–6 seconds → enter ADC calibration mode
// ➤ Press BUT1 for >6 seconds → reset stored calibration factor
// ➤ Measure the battery with a multimeter *while still connected*
//    (at battery contacts on the bottom of the board)
// ➤ LED blinks fast in calibration mode and flashes 3× on success
// ➤ LED flashes 5× quickly on calibration reset
// ==========================================================

#include <Preferences.h>

#define POWER_SENSE_PIN   25
#define BATTERY_PIN       2
#define BUTTON_PIN        9
#define LED_PIN           8

// Divider ratio (R5+R1)/R5 = 5.7
float resistorCoeff = 5.7;

// ADC calibration coefficient (stored in flash)
Preferences prefs;
float calibrationFactor = 1.0;

// LED control
unsigned long lastBlink = 0;
bool ledState = false;

// Calibration mode flag
bool calibrating = false;

// Button press tracking
unsigned long buttonPressStart = 0;
bool buttonPressed = false;

// ----------------------------------------------------------
// Setup
// ----------------------------------------------------------
void setup() {
  Serial.begin(115200);
  pinMode(POWER_SENSE_PIN, INPUT);
  pinMode(BATTERY_PIN, INPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);

  prefs.begin("adc-calib", false);
  calibrationFactor = prefs.getFloat("factor", 1.0);

  Serial.println("\nESP32-H2-DevKit-LiPo Power & Battery Sense");
  Serial.println("------------------------------------------------");
  Serial.print("Resistor divider coefficient: ");
  Serial.println(resistorCoeff);
  Serial.print("Calibration factor: ");
  Serial.print(calibrationFactor);
  if (prefs.isKey("factor"))
    Serial.println("  (loaded from flash)");
  else
    Serial.println("  (using default)");
  Serial.println("------------------------------------------------\n");
}

// ----------------------------------------------------------
// Main loop
// ----------------------------------------------------------
void loop() {
  unsigned long now = millis();

  // LED blinking pattern
  unsigned long interval = calibrating ? 150 : 800;
  if (now - lastBlink > interval) {
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState);
    lastBlink = now;
  }

  // Button press detection
  if (digitalRead(BUTTON_PIN) == LOW) {
    if (!buttonPressed) {
      buttonPressStart = now;
      buttonPressed = true;
    }
  } else {
    if (buttonPressed) {
      unsigned long pressDuration = now - buttonPressStart;

      if (pressDuration >= 2000 && pressDuration < 6000) {
        // Enter calibration mode
        startCalibration();
      } else if (pressDuration >= 6000) {
        // Reset calibration
        calibrationFactor = 1.0;
        prefs.clear();
        Serial.println("\n*** Calibration data reset! Using default = 1.0 ***");

        // Flash LED 5× to confirm reset
        for (int i = 0; i < 5; i++) {
          digitalWrite(LED_PIN, HIGH);
          delay(150);
          digitalWrite(LED_PIN, LOW);
          delay(150);
        }
      }

      buttonPressed = false;
    }
  }

  // Regular measurement mode
  if (!calibrating) {
    Serial.print("External Power Sense: ");
    Serial.println(digitalRead(POWER_SENSE_PIN));

    int mv = analogReadMilliVolts(BATTERY_PIN);
    float actualMv = mv * resistorCoeff * calibrationFactor;

    Serial.print("Battery Voltage: ");
    Serial.print(actualMv);
    Serial.println(" mV\n");
    delay(500);
  }
}

// ----------------------------------------------------------
// Calibration mode
// ----------------------------------------------------------
void startCalibration() {
  calibrating = true;
  Serial.println("\n=== ADC Calibration Mode ===");
  Serial.println("Measure the battery with a multimeter (while connected).");
  Serial.println("Enter the measured voltage in millivolts (e.g., 4120):");

  while (true) {
    if (Serial.available()) {
      String input = Serial.readStringUntil('\n');
      input.trim();
      float measuredMv = input.toFloat();

      if (measuredMv > 0) {
        int rawMv = analogReadMilliVolts(BATTERY_PIN) * resistorCoeff;
        calibrationFactor = measuredMv / rawMv;

        prefs.putFloat("factor", calibrationFactor);
        Serial.print("Calibration complete! Factor saved: ");
        Serial.println(calibrationFactor);

        // Flash LED 3× to confirm success
        for (int i = 0; i < 3; i++) {
          digitalWrite(LED_PIN, HIGH);
          delay(150);
          digitalWrite(LED_PIN, LOW);
          delay(150);
        }

        calibrating = false;
        Serial.println("Exiting calibration mode.\n");
        break;
      } else {
        Serial.println("Invalid input. Please enter numeric millivolts (e.g., 4120):");
      }
    }
  }
}



Open the serial console, then press and hold button BUT1 for 3 seconds and release to enter calibration mode. If you hold it for 6 seconds or more and release default calibration value of 1.0 will be loaded. Important!!! Measure battery while still connected to the board (at the contacts at the bottom). If you measure the battery while it is disconnected from the board there would be huge discrepancy!!!