[ref]sampl[/ref], код из приложенного проекта. Закомментировать ненужное можно
Код: Выделить всё
#include <OneWire.h>
#include <SoftwareSerial.h>
#include <PubSubClient.h>
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
byte _d18x2x1Addr[8]={0x28, 0x8A, 0x58, 0xEB, 0x5, 0x0, 0x0, 0x78};
OneWire _ow6(6);
//#define SerialMon Serial
String MQTT_inputTopic;
String MQTT_inputtext;
SoftwareSerial SerialAT(5, 4);
const char apn[] = "internet";
const char user[] = "";
const char pass[] = "";
const char* topicInit= "GsmClient/init";
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
PubSubClient mqtt(client);
long lastReconnectAttempt= 0;
bool En_75656550_1;
String msg_75656550_1;
String outTopic_75656550_1;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
float _tempVariable_float;
void setup()
{
Serial.begin(115200);
delay(10);
SerialAT.begin(19200);
delay(3000);
Serial.println("Initializing modem...");
modem.restart();
// Unlock your SIM card with a PIN
//modem.simUnlock("1234");
Serial.print("Waiting for network...");
if (!modem.waitForNetwork())
{
Serial.println(" fail");
while (true);
}
Serial.println(" OK");
Serial.print("Connecting to ");
Serial.print(apn);
if (!modem.gprsConnect(apn, user, pass))
{
Serial.println(" fail");
while (true);
}
Serial.println(" OK");
// MQTT Broker setup
mqtt.setServer("m16.cloudmqtt.com", 10816);
mqtt.setCallback(mqttCallback);
}
void loop()
{
//Плата:1
if (mqtt.connected())
{
mqtt.loop();
}
else
{
// Reconnect every 10 seconds
unsigned long t = millis();
if (t - lastReconnectAttempt > 10000L)
{
lastReconnectAttempt = t;
}
if (mqttConnect())
{
lastReconnectAttempt = 0;
}
else if (!modem.gprsConnect(apn, user, pass))
{
while (true);
}
}
if (1)
{
if (! _gen1I)
{
_gen1I = 1;
_gen1O = 1;
_gen1P = millis();
}
}
else
{
_gen1I = 0 ;
_gen1O= 0;
}
if (_gen1I)
{
if (_isTimer (_gen1P , 180000))
{
_gen1P = millis();
_gen1O = ! _gen1O;
}
}
if (_gen1O)
{
if (_trgrt1I)
{
_trgrt1 = 0;
}
else
{
_trgrt1 = 1;
_trgrt1I = 1;
}
}
else
{
_trgrt1 = 0;
_trgrt1I = 0;
}
;
if(_isTimer(_d18x2x1Tti, 360000))
{
_d18x2x1Tti = millis();
_tempVariable_float = _readDS18_ow6(_d18x2x1Addr, 0);
if (_tempVariable_float < 500)
{
_d18x2x1O = _tempVariable_float;
}
}
En_75656550_1 = _trgrt1;
msg_75656550_1 = (_floatToStringWitRaz((_d18x2x1O),2));
outTopic_75656550_1 = String("drev");
if (En_75656550_1 == 1)
{
mqtt.publish((char*) outTopic_75656550_1.c_str(), (char*) msg_75656550_1.c_str());
}
}
String _floatToStringWitRaz(float value, int raz)
{
return String(value,raz);
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{
return (currentTime>=(startTime + period));
}
else
{
return (currentTime >=(4294967295-startTime+period));
}
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
int16_t raw = (data[1] << 8) | data[0];
if (type_s)
{
raw = raw << 3;
if (data[7] == 0x10)
{
raw = (raw & 0xFFF0) + 12 - data[6];
}
}
else
{
byte cfg = (data[4] & 0x60);
if (cfg == 0x00)raw = raw & ~7;
else if(cfg == 0x20)raw = raw & ~3;
else if(cfg == 0x40) raw = raw & ~1;
}
return (float)raw / 16.0;
}
float _readDS18_ow6(byte addr[8], byte type_s)
{
byte data[12];
byte i;
_ow6.reset();
_ow6.select(addr);
_ow6.write(0xBE);
for (i = 0; i < 9; i++)
{
data[i] = _ow6.read();
}
_ow6.reset();
_ow6.select(addr);
_ow6.write(0x44);
if (_ow6.crc8(data, 8) != data[8])
{
return 501;
}
return _convertDS18x2xData(type_s, data);
}
boolean mqttConnect()
{
Serial.print("Connecting to ");
Serial.print("m16.cloudmqtt.com");
if (!mqtt.connect("", "bzcnhecm", "8jdgYxHld-tu"))
{
Serial.println(" fail");
return false;
}
Serial.println(" OK");
mqtt.publish(topicInit, "GsmClient started");
mqtt.subscribe("#");
return mqtt.connected();
}
void mqttCallback(char* topic, byte* payload, unsigned int len)
{
MQTT_inputtext = "";
MQTT_inputTopic = "";
MQTT_inputTopic = topic;
for (int i=0; i<len; i++)
{
MQTT_inputtext += (char)payload[i];
}
}