Чтобы подключить светодиод рекомендуем вам посмотреть следующую лабораторную работу:
Для того чтобы подключить насос, посмотрите следующие материалы:
Плата NodeMCU подключается к 5В внешнего источника следующим образом: на контакт 3В нужно подключить напряжение, а на контакт G подключить землю.
Прежде чем начать работать с платой NodeMCU почитайте материалы в окне снизу.
Скетч:
Описание команд:
Команда | Описание |
void setup() {} |
Функция которая быполняется только один раз, преднозначена для обявления пинов |
pinMode(пин,режим); |
Обявление пина |
void loop() {} |
Функция которая выполняется много раз, цикл |
digitalWrite(пин,HIGH или LOW); |
Команда с помощью которой включаем светодиод и насос (если HIGH) или выключаем (если LOW) |
delay(время в милисекундах); |
Задержка |
void setLeds(int r,int g,int b) |
Функция с аргументамы r,g, и b. Аргументы могут имеет значения либо HIGH либо LOW. |
setLeds(HIGH,LOW,LOW); |
Команда которая говорит что аргумент r=HIGH (красный светодиод горит), g=LOW (зелёный диод не горит) и b=LOW (синий диод тоже не горит). |
Перед началом работы рекомендуем прочитать материалы, расположенные в ifraim-ах ниже.
Также вам нужно скачать приложение Alterozoom, его вы можете скачать с официального сайта, потом вам нужно установить лицензию.
Для получения лицензии свяжитесь с нами по почте: branislava.jankovic.1998@ gmail.com
Скетч:
#include <ARpcArduStrHlp.h>
#include <ARpcDevice.h>
#include <ARpcDeviceState.h>
#include <ARpcIDevEventsCallback.h>
#include <ARpcIMessageCallback.h>
#include <ARpcIWriteCallback.h>
#include <ARpcRealDeviceMessageDispatch.h>
#include <ARpcSrvReady.h>
#include <ARpcStarNetDevice.h>
#include <ARpcStarNetEndPoint.h>
#include <ARpcStarNetEndPointDevice.h>
#include <ARpcStarNetStreamWriter.h>
#include <ARpcStreamParser.h>
#include <ARpcStreamWriter.h>
#include <ARpcUuid.h>
#include <BearSSLHelpers.h>
#include <CertStoreBearSSL.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiSTA.h>
#include <ESP8266WiFiType.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiClientSecureAxTLS.h>
#include <WiFiClientSecureBearSSL.h>
#include <WiFiServer.h>
#include <WiFiServerSecure.h>
#include <WiFiServerSecureAxTLS.h>
#include <WiFiServerSecureBearSSL.h>
#include <WiFiUdp.h>
#include <ESP8266HTTPClient.h>
uint16_t port=4081;
WiFiServer server(port);
WiFiClient client;
IPAddress bCastSenderIp;
WiFiUDP bCastCli;
bool connecting=false;
const char* ssid="WL3";
const char* password="11111111";
unsigned long lastSyncMillis=0;
const char *deviceName="Fountain"; // naziv uredjaja
const ARpcUuid deviceId("{f7bd39cd-53b9-4f2b-b487-cee1b80d2e3f}");
const char *interfaceStr="<controls>"
"<group title=\"FOUNTAIN_SETTINGS\">"
"<control title=\"PUMP ON\" command=\"pumpon\"/>"
"<control title=\"RGB ON\" command=\"rgbon\"/>"
"<control title=\"PUMP OFF\" command=\"pumpoff\"/>"
"<control title=\"RGB OFF\" command=\"rgboff\"/>"
"</group>"
"</controls>";
byte pump = D0;
void setLeds(int r, int g, int b)
{
digitalWrite(D1,r);
digitalWrite(D2,g);
digitalWrite(D3,b);
delay(500);
}
class NetWriteCb
:public ARpcIWriteCallback
{
public:
void writeData(const char *d,unsigned long sz)override
{
client.write(d,sz);
}
void writeStr(const char *str)override
{
client.print(str);
}
void writeStr(const __FlashStringHelper *str)override
{
client.print(str);
}
}netCb;
class SerialWriteCb
:public ARpcIWriteCallback
{
public:
void writeData(const char *d,unsigned long sz)override
{
Serial.write(d,sz);
}
void writeStr(const char *str)override
{
Serial.print(str);
}
void writeStr(const __FlashStringHelper *str)override
{
Serial.print(str);
}
}serialCb;
ARpcDevice wifiDev(300,&netCb,&deviceId,deviceName);
ARpcDevice serialDev(300,&serialCb,&deviceId,deviceName);
//callback-класс для обработки команд, вызывается библиотекой ARpc
class EventsCb
:public ARpcIDevEventsCallback
{
public:
explicit EventsCb(ARpcDevice *d)
{
dev=d;
}
virtual void processCommand(const char *cmd,const char *args[],unsigned char argsCount)
{
byte cmdOK = 1;
if (strcmp(cmd,"pumpon") ==0) {
digitalWrite(pump,HIGH);
wifiDev.disp().writeOk();
}
else if(strcmp(cmd,"rgbon") ==0) {
setLeds(HIGH,LOW,LOW);
setLeds(LOW,HIGH,LOW);
setLeds(LOW,LOW,HIGH);
setLeds(LOW,HIGH,HIGH);
setLeds(HIGH,LOW,HIGH);
setLeds(HIGH,HIGH,LOW);
setLeds(HIGH,HIGH,HIGH);
wifiDev.disp().writeOk();
}
else if(strcmp(cmd,"pumpoff") ==0) {
digitalWrite(pump,LOW);
wifiDev.disp().writeOk();
}
else if(strcmp(cmd,"rgboff") ==0) {
setLeds(LOW,LOW,LOW);
wifiDev.disp().writeOk();
}
else {
wifiDev.disp().writeErr("Unknown cmd");
cmdOK = 0;
}
}
virtual void onSyncMsg()
{
lastSyncMillis=millis();
}
private:
ARpcDevice *dev;
}serialEcb(&serialDev),wifiEcb(&wifiDev);
class SrcReadyCb
:public ARpcISrvReadyCallback
{
public:
void processSrvReadyMsg(const ARpcUuid &srvId,const char *srvName)
{
serialDev.disp().writeInfo("Server detected: ",bCastSenderIp.toString().c_str(),srvName);
if(client.connected()||connecting)return;
serialDev.disp().writeInfo("Connecting to server...");
connecting=true;
client.connect(bCastSenderIp,port);
for(int i=0;i<20;++i)
{
if(client.connected())
break;
delay(100);
}
serialDev.disp().writeInfo("Connected to server");
connecting=false;
wifiDev.resetParser();
lastSyncMillis=millis();
}
}srvReadyCb;
ARpcSrvReady srvReadyParser(200,&srvReadyCb);
void connectWifi()
{
WiFi.begin(ssid,password);
while(WiFi.status()!=WL_CONNECTED)
{
delay(500);
serialDev.disp().writeInfo("Wifi connecting");
}
serialDev.disp().writeInfo("WiFi connected");
}
void setup() {
// pin definition
pinMode(pump,OUTPUT);
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
// other stuff
delay(2000);
Serial.begin(9600);
wifiDev.disp().installDevEventsHandler(&wifiEcb);
wifiDev.disp().setControls(interfaceStr);
serialDev.disp().installDevEventsHandler(&serialEcb);
serialDev.disp().setControls(interfaceStr);
connectWifi();
bCastCli.begin(port);
// Start the server
server.begin();
serialDev.disp().writeInfo("Server started");
// Print the IP address
serialDev.disp().writeInfo(WiFi.localIP().toString().c_str());
serialDev.resetStream();
}
void checkBCastCli()
{
static int sz=0;
sz=bCastCli.parsePacket();
if(sz>0)
{
bCastSenderIp=bCastCli.remoteIP();
for(int i=0;i<sz;++i)
srvReadyParser.putByte(bCastCli.read());
}
}
void checkWifiClient()
{
if(client)
{
if(!client.connected())
{
serialDev.disp().writeInfo("Client connection lost");
client=server.available();
if(client)
{
serialDev.disp().writeInfo("Take next pending incoming connection");
lastSyncMillis=millis();
wifiDev.resetStream();
wifiDev.resetParser();
}
delay(100);
}
else
{
while(client.available())
wifiDev.putByte(client.read());
}
}
else
{
client=server.available();
if(client)
{
serialDev.disp().writeInfo("Take next pending incoming connection");
lastSyncMillis=millis();
wifiDev.resetStream();
wifiDev.resetParser();
}
delay(100);
}
}
void loop() {
// while(Serial.available())
// dev.putByte(Serial.read());
while(Serial.available())
serialDev.putByte(Serial.read());
if(WiFi.status()!=WL_CONNECTED)
connectWifi();
checkBCastCli();
checkWifiClient();
if(((millis()-lastSyncMillis)>12000)&&client.connected())
{
client.stop();
checkWifiClient();
}
delay(50);
}
Команда | Описание |
#include <название библиотекы> |
Команда с помощью которой подключаем библотеку |
const char* ssid="название сети к которой подключен локальный сервер"; | Определяем сеть к которой будет подключатся ваше IoT устройство |
const char* password="пароль сети"; | Указиваем пароль сети |
const char *deviceName="название IoT устройства"; | Указиваем название вашего устройства |
const ARpcUuid deviceId("{Id вашего устройства}"); | УказиваемID вашего устройства |
const char *interfaceStr="<controls>" "<group title=\"название настроек\">" "<control title=\"название команды которое будет выдно из проложения Alteroyzoom после нажатия на кнопку Controle device \" command=\"команда\"/>" "</group>" "</controls>"; |
Определение названия команд |
if(strcmp(cmd,"команда") ==0) { чась программы которая выполняется после нажатия кнопки с названием вашей команды из приложения wifiDev.disp().writeOk(); } |
Определяем что должно случится после нажатия вашей команды, если команда существует и она перечислена в разделе controls вы получаете сообщение от парсера что всё хорошо и что он команду узнал. |
wifiDev.disp().writeErr("Unknown cmd"); |
Сообщение которое получаете когда вы указали команду которая не указана в разделе controls |