Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Groete aan alle lesers van die "DIY of DIY"-afdeling op Habr! Vandag se artikel gaan oor die raakskakelaar op die TTP223-skyfie | datablad. Die skakelaar word aangedryf deur die nRF52832 mikrobeheerder | datablad, word die YJ-17103-module met 'n gedrukte antenna en 'n aansluiting vir 'n eksterne antenna MHF4 gebruik. Die raakskakelaar word aangedryf deur CR2430- of CR2450-batterye. Verbruik in transmissiemodus is nie meer as 8 mA nie, in slaapmodus nie meer as 6 μA nie.
Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Soos alle vorige projekte, is hierdie een ook 'n Arduino-projek, die program is in die Arduino IDE geskryf. Die sagteware-implementering van die toestel is gebaseer op die Mysensors | GitHub-biblioteke, GitHub-ondersteuning vir nRF5-borde in mysensors. Engelse gemeenskapsforum - http://forum.mysensors.org, Russies-talige gemeenskapsforum - http://mysensors.ru/forum/
(Vir diegene wat wil studeer - Dokumentasie, Reeksprotokol, API, protokol, ontleder | vir die wat wil helpbydraes) in projekontwikkeling - Dokumentasie)

Die aanraakskakelaarbord is in die Diptreys-program ontwikkel, met inagneming van die daaropvolgende produksie deur gebruik te maak van die Laserstryktegnologie (LUT) metode. Die bord is ontwerp in afmetings van 60x60mm (standaard glaspaneel het afmetings van 80x80mm). Die stroombaan is op die bladsye van die Antenna-tydskrif uitgedruk en met 'n Bosch-yster met die "Len"-instelling (maksimum krag) oorgeplaas na 'n dubbelzijdige foeliebedekte veselglasbord 1.5mm, 35μm (by gebrek aan 'n ander).
Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Ets is uitgevoer met 'n oplossing van ysterchloried, voorheen voorberei in verhoudings van 1.5 teelepels per 250 ml warm water. Die proses het 15 minute geneem.
Die vias en batteryhouergate is geboor met 'n DREMEL 3000 miniboor wat op 'n DREMEL 220 boorstaander gemonteer is.Die vias is met 'n 0,4mm boor geboor, die batteryhouergate met 'n 1,1mm boor. Snoei langs die rande van die bord is uitgevoer met dieselfde mini-boor met 'n DREMEL 540 spuitstuk (Snywiel d = 32.0mm). Snoei is in 'n respirator gedoen.
Die vertinning van die geëtste bord is gedoen met Rose-legering, in 'n waterige oplossing (1 teelepel gekristalliseerde sitroensuur per 300 ml water).

Die soldeerproses het ongeveer 'n uur geneem, die meeste van die tyd is daaraan bestee om die draad (vertin, 0.4 mm in deursnee) in die gate vir vias te soldeer.

Die bord is met 'n aërosolskoonmaker FLUX OFF gewas.
Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Die ontwikkeling van die toestelkas is in 'n driedimensionele rekenaargesteunde ontwerpredigeerder uitgevoer. Kofferafmetings 78,5 mm X 78,5 mm X 12 mm.
Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Die voltooide model van die liggaam en batterydeksel is in STL-formaat gestoor, dan was dit nodig om hierdie modelle voor te berei vir druk op 'n SLA-drukker (byvoeging van ondersteunings, oriëntasie). Op hierdie stadium was daar 'n klein probleem, aangesien die drukbare area van verbruikers SLA-drukkers klein is. Die model van die toestelliggaam in die mees optimale posisie in verhouding tot die druktyd het nie by die afmetings van die drukarea ingepas nie. Wanneer die model op 45 grade geplaas is, het dit ook 'n teleurstellende resultaat gelewer, die gewig van die ondersteuning was gelyk aan die gewig van die rompmodel. Daar is besluit om die model vertikaal te druk, met ondersteuning aan een van die voorkante, wat vooraf met die naverwerkingsfeit ooreengekom het. Die houer het 5 uur geneem om te druk met 'n laagverstelling van 50 mikron. Vervolgens is verwerking uitgevoer met baie fynkorrelige skuurpapier (ek sal nie die nommer skryf nie, want ek weet nie :)). Die batterydeksel het 40 minute geneem om te druk.
Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Glaspanele van Aliexpress word verkoop met 'n plastiekraam wat reeds vasgeplak is, daar was geen probleme met die verwydering van die raam nie. Ek het die voorverhitte glaspaneel met 'n konvensionele haardroër verwyder.
Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Die diffuser vir die led-agterlig is gemaak van dubbelzijdige kleefband met 3M 9088-200 akriel-kleefmiddel. Vir fluoresserende beligting was daar verskeie materiale om van te kies, Chinese kleefband en kleefpapier wat deur die plaaslike maatskappy Luminophor in bande gesny is. Die keuse is gemaak ten gunste van 'n huishoudelike vervaardiger, volgens my gevoelens het dit helderder en langer geskyn. ’n Vierkant papier met fluoresserende pigment is bo-op vasgeplak met dubbelzijdige kleefband 3M 9088-200.

Die gom van die glas aan die liggaam van die skakelaar is uitgevoer met behulp van dubbelzijdige kleefband met 3M VHB 4910 akriel gom.
Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Die deksel is met 'n skroef M 1,4 X 5mm vasgemaak.

Die koste van die toestel was 890 roebels.

Volgende het die sagteware-deel gekom. Daar was geen probleme nie. Dit blyk dat TTP223-sensormikrokringe goed werk met 'n gestabiliseerde kragtoevoer van .3.3v en nie baie goed wanneer dit direk vanaf 'n goed ontlaaide battery aangedryf word nie. Wanneer die toestel met 'n kragtoevoer rondom 2.5v begin word, plus na 'n bykomende "drawdown" wanneer die Mysensors-aanbieding uitgewerk word, het die TTP223-skyfie (onmiddellik na kalibrasie) die MK laat onderbreek omdat dit met 'n aktiewe sneller was.

Die kragtoevoerkring vir die mikrokring is verander (kragbestuur TTP223 met gpio MK), addisionele grond is gekoppel, weerstande met hoër weerstand is vervang op die rgb led-lyne (wat langs die ander kant van die kapasitiewe sensorbord loop). Ook in die sagteware is bygevoeg: kragaktivering vir die kapasitiewe mikrokring nadat die Mysensors-raamwerk begin is en die aanbieding uitgewerk het. Verdubbel die vertraging vir outo-kalibrasie van die TTP223-skyfie wanneer krag daarop toegepas word. Al hierdie veranderinge het hierdie probleem heeltemal uitgeskakel.

Voordat ek die programkode bekyk, beveel ek aan om kennis te maak met die basiese struktuur van sketse in Mysensors.void before()
{
// Дополнительная функция, если сравнивать со стандартной структурой Ардуино скетчей, то before() это подобие setup(), отработка происходит до инициализации транспортного уровня Mysensors, рекомендуется например для инициализации устройств SPI
}

void setup()
{

}

void presentation()
{
//Тут происходит презентация ноды и ее сенсоров на контролере через маршрутизатор
sendSketchInfo("Name of my sensor node", "1.0"); // презентация названия ноды, версии ПО
present(CHILD_ID, S_WHATEVER, "Description"); // презентация сенсоров ноды, описания сенсоров
}

void loop()
{

}

Toetskode van die aanraakskakelaarprogram:test_sens.ino
/**
ТЕСТОВЫЙ СКЕТЧ СЕНСОРНОГО ВЫКЛЮЧАТЕЛЯ С ПРЕРЫВАНИЯМИ НА NRF_LPCOMP
*/
bool button_flag;
bool sens_flag;
bool send_flag;
bool detection;
bool nosleep;
byte timer;
unsigned long SLEEP_TIME = 21600000; //6 hours
unsigned long oldmillis;
unsigned long newmillis;
unsigned long interrupt_time;
unsigned long SLEEP_TIME_W;
uint16_t currentBatteryPercent;
uint16_t batteryVoltage = 0;
uint16_t battery_vcc_min = 2400;
uint16_t battery_vcc_max = 3000;

#define MY_RADIO_NRF5_ESB
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 30
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define IRT_PIN 3 //(PORT0, gpio 5)
#include <MySensors.h>
// see https://www.mysensors.org/download/serial_api_20
#define SENS_CHILD_ID 0
#define CHILD_ID_VOLT 254
MyMessage sensMsg(SENS_CHILD_ID, V_VAR1);
//MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);

void preHwInit() {
sleep(2000);
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, HIGH);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(GREEN_LED, HIGH);
pinMode(BLUE_LED, OUTPUT);
digitalWrite(BLUE_LED, HIGH);
pinMode(MODE_PIN, INPUT);
pinMode(SENS_PIN, INPUT);
}

void before()
{
NRF_POWER->DCDCEN = 1;
NRF_UART0->ENABLE = 0;
sleep(1000);
digitalWrite(BLUE_LED, LOW);
sleep(150);
digitalWrite(BLUE_LED, HIGH);
}

void presentation() {
sendSketchInfo("EFEKTA Sens 1CH Sensor", "1.1");
present(SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS");
//present(CHILD_ID_VOLT, S_MULTIMETER, "Battery");
}

void setup() {
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
sleep(200);
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
lpComp();
detection = false;
SLEEP_TIME_W = SLEEP_TIME;
pinMode(31, OUTPUT);
digitalWrite(31, HIGH);
/*
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(5);
digitalWrite(GREEN_LED, HIGH);
wait(500);
}
timer = 0;
*/
sleep(7000);
while (timer < 3) {
timer++;
digitalWrite(GREEN_LED, LOW);
sleep(15);
digitalWrite(GREEN_LED, HIGH);
sleep(85);
}
timer = 0;
sleep(1000);
}

void loop() {

if (detection) {
if (digitalRead(MODE_PIN) == 1 && button_flag == 0 && digitalRead(SENS_PIN) == 0) {
//back side button detection
button_flag = 1;
nosleep = 1;
}
if (digitalRead(MODE_PIN) == 1 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
digitalWrite(RED_LED, LOW);
wait(10);
digitalWrite(RED_LED, HIGH);
wait(50);
}
if (digitalRead(MODE_PIN) == 0 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
nosleep = 0;
button_flag = 0;
digitalWrite(RED_LED, HIGH);
lpComp_reset();
}

if (digitalRead(SENS_PIN) == 1 && sens_flag == 0 && digitalRead(MODE_PIN) == 0) {
//sens detection
sens_flag = 1;
nosleep = 1;
newmillis = millis();
interrupt_time = newmillis - oldmillis;
SLEEP_TIME_W = SLEEP_TIME_W - interrupt_time;
if (send(sensMsg.set(detection))) {
send_flag = 1;
}
}
if (digitalRead(SENS_PIN) == 1 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
if (send_flag == 1) {
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(20);
digitalWrite(GREEN_LED, HIGH);
wait(30);
}
timer = 0;
} else {
while (timer < 10) {
timer++;
digitalWrite(RED_LED, LOW);
wait(20);
digitalWrite(RED_LED, HIGH);
wait(30);
}
timer = 0;
}
}
if (digitalRead(SENS_PIN) == 0 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
sens_flag = 0;
nosleep = 0;
send_flag = 0;
digitalWrite(GREEN_LED, HIGH);
sleep(500);
lpComp_reset();
}
if (SLEEP_TIME_W < 60000) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
}
else {
//if (detection == -1) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
if (nosleep == 0) {
oldmillis = millis();
sleep(SLEEP_TIME_W);
}
}

void sendBatteryStatus() {
wait(20);
batteryVoltage = hwCPUVoltage();
wait(2);

if (batteryVoltage > battery_vcc_max) {
currentBatteryPercent = 100;
}
else if (batteryVoltage < battery_vcc_min) {
currentBatteryPercent = 0;
} else {
currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min);
}

sendBatteryLevel(currentBatteryPercent, 1);
wait(2000, C_INTERNAL, I_BATTERY_LEVEL);
//send(powerMsg.set(batteryVoltage), 1);
//wait(2000, 1, V_VAR1);
}

void lpComp() {
NRF_LPCOMP->PSEL = IRT_PIN;
NRF_LPCOMP->ANADETECT = 1;
NRF_LPCOMP->INTENSET = B0100;
NRF_LPCOMP->ENABLE = 1;
NRF_LPCOMP->TASKS_START = 1;
NVIC_SetPriority(LPCOMP_IRQn, 15);
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}

void s_lpComp() {
if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR = B0100;
}
}

void r_lpComp() {
NRF_LPCOMP->INTENSET = B0100;
}

#if __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(event)
event = 0;
(void)event
#else
#define NRF5_RESET_EVENT(event) event = 0
#endif

extern "C" {
void LPCOMP_IRQHandler(void) {
detection = true;
NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP);
NRF_LPCOMP->EVENTS_UP = 0;
MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2);
}
}

void lpComp_reset () {
s_lpComp();
detection = false;
NRF_LPCOMP->EVENTS_UP = 0;
r_lpComp();
}

MyBoardNRF5.cpp
#ifdef MYBOARDNRF5
#include <variant.h>

/*
* Pins descriptions. Attributes are ignored by arduino-nrf5 variant.
* Definition taken from Arduino Primo Core with ordered ports
*/
const PinDescription g_APinDescription[]=
{
{ NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ PORT0, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
{ PORT0, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
{ PORT0, 4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
{ PORT0, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
{ PORT0, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
{ PORT0, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
{ PORT0, 8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER}, //USER_LED
{ PORT0, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
{ PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
{ PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
{ PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
{ PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
{ PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
{ PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
{ PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
{ PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
{ PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
{ PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
{ PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
{ PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
{ PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
{ PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //RED_LED
{ PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //GREEN_LED
{ PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //BLUE_LED
{ PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
{ PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
{ PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
{ PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
};

// Don't remove this line
#include <compat_pin_mapping.h>

#endif

MyBoardNRF5.h
#ifndef _MYBOARDNRF5_H_
#define _MYBOARDNRF5_H_

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

// Number of pins defined in PinDescription array
#define PINS_COUNT (32u)
#define NUM_DIGITAL_PINS (32u)
#define NUM_ANALOG_INPUTS (8u)
#define NUM_ANALOG_OUTPUTS (8u)

/*
* LEDs
*
* This is optional
*
* With My Sensors, you can use
* hwPinMode() instead of pinMode()
* hwPinMode() allows to use advanced modes like OUTPUT_H0H1 to drive LEDs.
* https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
*
*/
#define PIN_LED1 (16)
#define PIN_LED2 (15)
#define PIN_LED3 (17)
#define RED_LED (PIN_LED1)
#define GREEN_LED (PIN_LED2)
#define BLUE_LED (PIN_LED3)
#define INTERRUPT_PIN (5)
#define MODE_PIN (25)
#define SENS_PIN (27)

/*
* Analog ports
*
* If you change g_APinDescription, replace PIN_AIN0 with
* port numbers mapped by the g_APinDescription Array.
* You can add PIN_AIN0 to the g_APinDescription Array if
* you want provide analog ports MCU independed, you can add
* PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
* defined in MyBoardNRF5.cpp
*/
static const uint8_t A0 = ADC_A0;
static const uint8_t A1 = ADC_A1;
static const uint8_t A2 = ADC_A2;
static const uint8_t A3 = ADC_A3;
static const uint8_t A4 = ADC_A4;
static const uint8_t A5 = ADC_A5;
static const uint8_t A6 = ADC_A6;
static const uint8_t A7 = ADC_A7;

/*
* Serial interfaces
*
* RX and TX are required.
* If you have no serial port, use unused pins
* CTS and RTS are optional.
*/
#define PIN_SERIAL_RX (11)
#define PIN_SERIAL_TX (12)

#ifdef __cplusplus
}
#endif

#endif

Die skakelaar het 'n raakknoppie en 'n taktknoppie aan die agterkant van die toestel. Hierdie taktknoppie sal gebruik word vir diensmodusse, lugbindmodus, nulstelling van die toestel. Die knoppie het 'n yster teen bons. Die lyn van die kapasitiewe sensor en die lyn van die klokknoppie deur die Schottky-diodes word gekoppel en aan die analoogpen p0.05 gekoppel, ook vanaf die kapasitiewe sensor en die klokknoppie is daar lyne na die MK-penne p0.25 en p0.27 .0.05 om die toestande te lees nadat die onderbreking op pen p0.05. XNUMX geaktiveer is. Op pen pXNUMX word 'n onderbreking via 'n vergelyker (NRF_LPCOMP) deur EVENTS_UP geaktiveer. Inspirasie vir die oplossing van die probleem ontvang hier и hier.

Die skakelaar is bygevoeg by die Mysensors-netwerk wat deur die Majordomo-slimhuisbeheerder bestuur word (projek webwerf)

PHP-kode om by die skakelaar se statusUpdate-metode te voeg

if (getGlobal("MysensorsButton01.status")==1) {
if (getGlobal('MysensorsRelay04.status') == 0) {
setGlobal('MysensorsRelay04.status', '1');
} else if (getGlobal('MysensorsRelay04.status') == 1) {
setGlobal('MysensorsRelay04.status', '0');
} 
}

Sien die video vir die uitslag

Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Later is 'n variant met 'n hupstoot-omskakelaar gemaak, maar dit hou nie verband met die werking van die TTP223 kapasitiewe mikrokring nie, daar is meer begeerte vir 'n goeie en eenvormige agtergrond wanneer u die hele batterylewe lank druk.

kykDraadlose aanraakskakelaar met bykomende fluoresserende beligting

Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Projek Github - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

Russies sprekend gemeenskap webwerf mysensors

Telegram-klets Mysensors - vinnige probleemoplossing met Mysensors, wenke, truuks, bordinstallasie, werk met atmega 328, stm32, nRF5 mikrobeheerders in die Arduino IDE - @mysensors_rus

Paar prentjiesDraadlose aanraakskakelaar met bykomende fluoresserende beligting

Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Draadlose aanraakskakelaar met bykomende fluoresserende beligting

Bron: will.com

Voeg 'n opmerking