Не очень надеюсь, что кто-то сможет чем-то помочь, поэтому скетч пока выкладывать не буду. Опишу словами:
Есть NodeMCU к выводу D1 (GPIO5) которого подключен примитивный приемник 433МГц (сейчас RXB6, как самый хваленый, но картина не сильно отличается и с SRX882 и даже с RF-5V) - задача принять и расшифровать сигналы от стандартного RC_Switch устройства и датчиков Oregon Scientific.
Реализация довольно примитивная: сигнал с приемника вызывает прерывание на D1 - там определяется его длинна (от предыдущего прерывания) и по известным алгоритмам переводится в байты RCSwitch или манчестерский код.
Велосипед не изобретался. была взята известная библиотека RCSwitch и в ее процедуру обработки прерывания вкостылена еще и функция обсчета манчестерского кода известным классом DecodeOOK.
Вся математика в прерывании. В теле loop проверяется только флаг прочитанного кода и если он выставлен - результат выводится в Serial.
Теперь интрига.
Сначала все это опробывал на Arduino UNO (с подключением к 2-му цифровому, прерывание 0) - работает как часы. Просто отлично.
Поменял в скетче только номер прерывания. Загрузил в ESP и облом. RCSwitch - все так же выдает как часы, данные от Oregon получаются расшифровать в среднем в 1 из 7-10 посылок. При этом еще и куча ложняков приходит (это при том, что 6/8 байт манчестерского кода проверяются по CRC !!!)
Погрешил на шумность ESP - смонтировал UNO и NodeMCU на одной макетке c одним приемником, выход которого подключил без всякой развязки к 2 и D1 выводов МК сответственно. Питание пробывал подавать и от уны и от ноды. Запускаю скетчи одновременно - смотрю в разных терминалах. Результат - тот же. Все прекрасно работает на уне, но на esp только RCSwitch работает отлично, по Орегону очень редко и ложняки.
Хотя бы понять с чем это связано может быть? Аппаратно или программно?
Есть NodeMCU к выводу D1 (GPIO5) которого подключен примитивный приемник 433МГц (сейчас RXB6, как самый хваленый, но картина не сильно отличается и с SRX882 и даже с RF-5V) - задача принять и расшифровать сигналы от стандартного RC_Switch устройства и датчиков Oregon Scientific.
Реализация довольно примитивная: сигнал с приемника вызывает прерывание на D1 - там определяется его длинна (от предыдущего прерывания) и по известным алгоритмам переводится в байты RCSwitch или манчестерский код.
Велосипед не изобретался. была взята известная библиотека RCSwitch и в ее процедуру обработки прерывания вкостылена еще и функция обсчета манчестерского кода известным классом DecodeOOK.
Вся математика в прерывании. В теле loop проверяется только флаг прочитанного кода и если он выставлен - результат выводится в Serial.
Теперь интрига.
Сначала все это опробывал на Arduino UNO (с подключением к 2-му цифровому, прерывание 0) - работает как часы. Просто отлично.
Поменял в скетче только номер прерывания. Загрузил в ESP и облом. RCSwitch - все так же выдает как часы, данные от Oregon получаются расшифровать в среднем в 1 из 7-10 посылок. При этом еще и куча ложняков приходит (это при том, что 6/8 байт манчестерского кода проверяются по CRC !!!)
Погрешил на шумность ESP - смонтировал UNO и NodeMCU на одной макетке c одним приемником, выход которого подключил без всякой развязки к 2 и D1 выводов МК сответственно. Питание пробывал подавать и от уны и от ноды. Запускаю скетчи одновременно - смотрю в разных терминалах. Результат - тот же. Все прекрасно работает на уне, но на esp только RCSwitch работает отлично, по Орегону очень редко и ложняки.
Хотя бы понять с чем это связано может быть? Аппаратно или программно?