This section explains how to use the Analog-to-Digital Converter (ADC) on the obniz IO pins to measure analog voltage.
Overview
By using the ad.get(IO) function, you can read the voltage applied to a specific IO pin as a numerical value. This is useful for retrieving data from analog sensors such as temperature, light, or pressure sensors.
Function Description
ad.get(pin_number)
- Description: Measures the voltage on the specified IO pin.
- Parameters:
pin_number(number): The ID of the IO pin you wish to measure.
- Return Value:
- Returns the measured voltage in Volts (V).
From OS7.1.0,
ad.get()also runs on obniz Board. The 10-bit ADC of the obniz Board and the 12-bit ADC of the ESP32 family are both scaled to volts internally, so the same code works across these products.
Code Example
The following Lua script demonstrates how to continuously read the analog voltage from IO Pin 1 and log it to the console.
-- This function runs repeatedly when the device is offline
function on_offline_loop()
loop()
end
-- This function runs repeatedly when the device is online
function on_online_loop()
loop()
end
-- Initialization
os.log(" - Lua Start");
-- Set Pin 1 to retain its state (keep it active for ADC)
io.retain(1, true);
-- Main Loop
function loop()
-- Wait for 100ms to prevent excessive processing
os.wait(100);
-- Retrieve voltage from Pin 1 and log the value
-- The value is returned in Volts (e.g., 1.25v)
os.log("AD1: " .. ad.get(1) .. "v");
end
Key Points
- io.retain: In this script,
io.retain(1, true)is used to ensure the pin remains in a state where it can be measured consistently. - Polling Interval: The
os.wait(100)is included to manage the sampling rate. You can adjust this value depending on how frequently you need to monitor the sensor data. - Unit: Note that the value returned by
ad.get()is already scaled to Volts, so no complex conversion from raw 10-bit or 12-bit integers is required.