Yellow Rabbit

Вспоминая о силе тока на GPIO

Управление током GPIO Raspberry Pi

Прошлый раз, когда светодиод так восхитительно засиял, мы совсем упустили из виду, что нужно как-то регулировать ток на GPIO, поскольку 8mA, которые установлены по умолчанию, немного не похожи на нужные 4mA.

Для начала ток регулируется не для отдельного GPIO, а для всех сразу (на самом деле для трёх групп контактов, но на Raspberry Pi 3b, которая у меня, такая группа только одна - с номером 0).

Когда я занялся вопросом регулирования тока1, то обнаружил, что в библиотеке jpigpio эти функции отсутствуют, так что пришлось добавлять их. Я оформил PR, но пока его не примут в основной репозитарий можно использовать мой.

Пример

Считываем текущие установки тока и меняем, если нужно:


fun main(args: Array<String>) {
    // dirty hack: need to point java.library.path to the location of libJPigpioC.so
    AddDir.addDir("/home/rabbit/local/lib")

    println("Kotlin Raspberry Pi gentoo64")
    println("You must see a blinking universe :)")
    try {
        // Init lib
        val pigpio = Pigpio()
        pigpio.gpioInitialize()
        Utils.addShutdown(pigpio)

        // Mode output
        pigpio.gpioSetMode(LED_PIN, PI_OUTPUT)

        // Check drive strength on GPIO
        val strength = pigpio.gpioGetPad(0)
        println("Current drive strength:${strength}mA")

        if (strength != CURRENT) {
            pigpio.gpioSetPad(0, CURRENT)
            val newStrength = pigpio.gpioGetPad(0)
            println("New drive strength:${newStrength}mA")
        }

        repeat(3) {
            // ON
            pigpio.gpioWrite(LED_PIN, PI_HIGH)
            pigpio.gpioDelay(500 * 1000)
            // OFF
            pigpio.gpioWrite(LED_PIN, PI_LOW)
            pigpio.gpioDelay(500 * 1000)
        }
    } catch(e: PigpioException) {
        e.printStackTrace()
    }
    pigpio.gpioSetMode(LED_PIN, PI_INPUT)
}

const val LED_PIN = 26 // GPIO26
const val CURRENT = 4 // 4mA

Как это сработало: Результат запуска

  1. Ещё раз повторю, что установка тока GPIO в 4mA не означает, что ток будет ограничен этим значением. Это всего лишь гарантирует, что при токе в 4mA логические уровни будут чётко различаться.