Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Модератор: immortal
-
- Сообщения: 469
- Зарегистрирован: Вт мар 12, 2013 1:22 am
- Благодарил (а): 41 раз
- Поблагодарили: 81 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
У меня с такими масками настроено и работает:
28E69A5C040000DB:(.+?);
2861DF5C0400008F:(.+?);
и т.д.
28E69A5C040000DB:(.+?);
2861DF5C0400008F:(.+?);
и т.д.
-
- Сообщения: 2
- Зарегистрирован: Вт окт 15, 2013 6:25 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Проблема с чтением датчиков решилась установкой времени обновления в 0. Стоит выставить другое значение - выдаются данные только с одного датчика. Похоже не успевает отработать цикл.
-
- Сообщения: 165
- Зарегистрирован: Пт янв 20, 2012 3:05 pm
- Благодарил (а): 9 раз
- Поблагодарили: 1 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Добрый день, коллеги!
Нашел интересный скетч по чтению датчиков Oregon и других протоколов на 433МГЦ
Читает и noolight и прочие китайские штуки.
arduino.ru
Не могу разобраться как сделать, чтобы скетч отдавал на в COM-port, а на сервер...
Это выдает с передатчика noolight
Аналогично с Oregon'овcких датчиков и китайских беспроводных датчиков.
И совместить все это с предыдущим скетчем.
Как сделать чтобы функция reportSerial() сохранял данные в глобальных переменных чтобы их можно использовать в дальнейшем.
Спасибо.
Нашел интересный скетч по чтению датчиков Oregon и других протоколов на 433МГЦ
Читает и noolight и прочие китайские штуки.
arduino.ru
Код: Выделить всё
// Oregon V2 decoder added - Dominique Pierre
// Oregon V3 decoder revisited - Dominique Pierre
// New code to decode OOK signals from weather sensors, etc.
// 2010-04-11 <jcw@equi4.com> <a data-cke-saved-href="<a href="http://opensource.org/licenses/mit-license.php" rel="nofollow">http://opensource.org/licenses/mit-license.php</a>" href="<a href="http://opensource.org/licenses/mit-license.php" rel="nofollow">http://opensource.org/licenses/mit-license.php</a>" rel="nofollow"><a href="http://opensource.org/licenses/mit-license.php" rel="nofollow">http://opensource.org/licenses/mit-license.php</a></a>
// $Id: ookDecoder.pde 5331 2010-04-17 10:45:17Z jcw $
class DecodeOOK {
protected:
byte total_bits, bits, flip, state, pos, data[25];
virtual char decode (word width) =0;
public:
enum { UNKNOWN, T0, T1, T2, T3, OK, DONE };
DecodeOOK () { resetDecoder(); }
bool nextPulse (word width) {
if (state != DONE)
switch (decode(width)) {
case -1: resetDecoder(); break;
case 1: done(); break;
}
return isDone();
}
bool isDone () const { return state == DONE; }
const byte* getData (byte& count) const {
count = pos;
return data;
}
void resetDecoder () {
total_bits = bits = pos = flip = 0;
state = UNKNOWN;
}
// add one bit to the packet data buffer
virtual void gotBit (char value) {
total_bits++;
byte *ptr = data + pos;
*ptr = (*ptr >> 1) | (value << 7);
if (++bits >= 8) {
bits = 0;
if (++pos >= sizeof data) {
resetDecoder();
return;
}
}
state = OK;
}
// store a bit using Manchester encoding
void manchester (char value) {
flip ^= value; // manchester code, long pulse flips the bit
gotBit(flip);
}
// move bits to the front so that all the bits are aligned to the end
void alignTail (byte max =0) {
// align bits
if (bits != 0) {
data[pos] >>= 8 - bits;
for (byte i = 0; i < pos; ++i)
data[i] = (data[i] >> bits) | (data[i+1] << (8 - bits));
bits = 0;
}
// optionally shift bytes down if there are too many of 'em
if (max > 0 && pos > max) {
byte n = pos - max;
pos = max;
for (byte i = 0; i < pos; ++i)
data[i] = data[i+n];
}
}
void reverseBits () {
for (byte i = 0; i < pos; ++i) {
byte b = data[i];
for (byte j = 0; j < 8; ++j) {
data[i] = (data[i] << 1) | (b & 1);
b >>= 1;
}
}
}
void reverseNibbles () {
for (byte i = 0; i < pos; ++i)
data[i] = (data[i] << 4) | (data[i] >> 4);
}
void done () {
while (bits)
gotBit(0); // padding
state = DONE;
}
};
// 433 MHz decoders
class OregonDecoderV2 : public DecodeOOK {
public:
OregonDecoderV2() {}
// add one bit to the packet data buffer
virtual void gotBit (char value) {
if(!(total_bits & 0x01))
{
data[pos] = (data[pos] >> 1) | (value ? 0x80 : 00);
}
total_bits++;
pos = total_bits >> 4;
if (pos >= sizeof data) {
resetDecoder();
return;
}
state = OK;
}
virtual char decode (word width) {
if (200 <= width && width < 1200) {
byte w = width >= 700;
switch (state) {
case UNKNOWN:
if (w != 0) {
// Long pulse
++flip;
} else if (32 <= flip) {
// Short pulse, start bit
flip = 0;
state = T0;
} else {
// Reset decoder
return -1;
}
break;
case OK:
if (w == 0) {
// Short pulse
state = T0;
} else {
// Long pulse
manchester(1);
}
break;
case T0:
if (w == 0) {
// Second short pulse
manchester(0);
} else {
// Reset decoder
return -1;
}
break;
}
} else {
return -1;
}
return total_bits == 160 ? 1: 0;
}
};
class OregonDecoderV3 : public DecodeOOK {
public:
OregonDecoderV3() {}
// add one bit to the packet data buffer
virtual void gotBit (char value) {
data[pos] = (data[pos] >> 1) | (value ? 0x80 : 00);
total_bits++;
pos = total_bits >> 3;
if (pos >= sizeof data) {
resetDecoder();
return;
}
state = OK;
}
virtual char decode (word width) {
if (200 <= width && width < 1200) {
byte w = width >= 700;
switch (state) {
case UNKNOWN:
if (w == 0)
++flip;
else if (32 <= flip) {
flip = 1;
manchester(1);
} else
return -1;
break;
case OK:
if (w == 0)
state = T0;
else
manchester(1);
break;
case T0:
if (w == 0)
manchester(0);
else
return -1;
break;
}
} else {
return -1;
}
return total_bits == 80 ? 1: 0;
}
};
class CrestaDecoder : public DecodeOOK {
public:
CrestaDecoder () {}
virtual char decode (word width) {
if (200 <= width && width < 1300) {
byte w = width >= 750;
switch (state) {
case UNKNOWN:
if (w == 1)
++flip;
else if (2 <= flip && flip <= 10)
state = T0;
else
return -1;
break;
case OK:
if (w == 0)
state = T0;
else
gotBit(1);
break;
case T0:
if (w == 0)
gotBit(0);
else
return -1;
break;
}
} else if (width >= 2500 && pos >= 7)
return 1;
else
return -1;
return 0;
}
};
class KakuDecoder : public DecodeOOK {
public:
KakuDecoder () {}
virtual char decode (word width) {
if (180 <= width && width < 450 || 950 <= width && width < 1250) {
byte w = width >= 700;
switch (state) {
case UNKNOWN:
case OK:
if (w == 0)
state = T0;
else
return -1;
break;
case T0:
if (w)
state = T1;
else
return -1;
break;
case T1:
state += w + 1;
break;
case T2:
if (w)
gotBit(0);
else
return -1;
break;
case T3:
if (w == 0)
gotBit(1);
else
return -1;
break;
}
} else if (width >= 2500 && 8 * pos + bits == 12) {
for (byte i = 0; i < 4; ++i)
gotBit(0);
alignTail(2);
return 1;
} else
return -1;
return 0;
}
};
class XrfDecoder : public DecodeOOK {
public:
XrfDecoder () {}
// see also <a data-cke-saved-href="<a href="http://davehouston.net/rf.htm" rel="nofollow">http://davehouston.net/rf.htm</a>" href="<a href="http://davehouston.net/rf.htm" rel="nofollow">http://davehouston.net/rf.htm</a>" rel="nofollow"><a href="http://davehouston.net/rf.htm" rel="nofollow">http://davehouston.net/rf.htm</a></a>
virtual char decode (word width) {
if (width > 2000 && pos >= 4)
return 1;
if (width > 5000)
return -1;
if (width > 4000 && state == UNKNOWN)
state = OK;
else if (350 <= width && width < 1800) {
byte w = width >= 720;
switch (state) {
case OK:
if (w == 0)
state = T0;
else
return -1;
break;
case T0:
gotBit(w);
break;
}
} else
return -1;
return 0;
}
};
class HezDecoder : public DecodeOOK {
public:
HezDecoder () {}
// see also <a data-cke-saved-href="<a href="http://homeeasyhacking.wikia.com/wiki/Home_Easy_Hacking_Wiki" rel="nofollow">http://homeeasyhacking.wikia.com/wiki/Home_Easy_Hacking_Wiki</a>" href="<a href="http://homeeasyhacking.wikia.com/wiki/Home_Easy_Hacking_Wiki" rel="nofollow">http://homeeasyhacking.wikia.com/wiki/Home_Easy_Hacking_Wiki</a>" rel="nofollow"><a href="http://homeeasyhacking.wikia.com/wiki/Home_Easy_Hacking_Wiki" rel="nofollow">http://homeeasyhacking.wikia.com/wiki/Home_Easy_Hacking_Wiki</a></a>
virtual char decode (word width) {
if (200 <= width && width < 1200) {
byte w = width >= 600;
gotBit(w);
} else if (width >= 5000 && pos >= 5 /*&& 8 * pos + bits == 50*/) {
for (byte i = 0; i < 6; ++i)
gotBit(0);
alignTail(7); // keep last 56 bits
return 1;
} else
return -1;
return 0;
}
};
// 868 MHz decoders
class VisonicDecoder : public DecodeOOK {
public:
VisonicDecoder () {}
virtual char decode (word width) {
if (200 <= width && width < 1000) {
byte w = width >= 600;
switch (state) {
case UNKNOWN:
case OK:
state = w == 0 ? T0 : T1;
break;
case T0:
gotBit(!w);
if (w)
return 0;
break;
case T1:
gotBit(!w);
if (!w)
return 0;
break;
}
// sync error, flip all the preceding bits to resync
for (byte i = 0; i <= pos; ++i)
data[i] ^= 0xFF;
} else if (width >= 2500 && 8 * pos + bits >= 36 && state == OK) {
for (byte i = 0; i < 4; ++i)
gotBit(0);
alignTail(5); // keep last 40 bits
// only report valid packets
byte b = data[0] ^ data[1] ^ data[2] ^ data[3] ^ data[4];
if ((b & 0xF) == (b >> 4))
return 1;
} else
return -1;
return 0;
}
};
class EMxDecoder : public DecodeOOK {
public:
EMxDecoder () {}
// see also <a data-cke-saved-href="<a href="http://fhz4linux.info/tiki-index.php?page=EM+Protocol" rel="nofollow">http://fhz4linux.info/tiki-index.php?page=EM+Protocol</a>" href="<a href="http://fhz4linux.info/tiki-index.php?page=EM+Protocol" rel="nofollow">http://fhz4linux.info/tiki-index.php?page=EM+Protocol</a>" rel="nofollow"><a href="http://fhz4linux.info/tiki-index.php?page=EM+Protocol" rel="nofollow">http://fhz4linux.info/tiki-index.php?page=EM+Protocol</a></a>
virtual char decode (word width) {
if (200 <= width && width < 1000) {
byte w = width >= 600;
switch (state) {
case UNKNOWN:
if (w == 0)
++flip;
else if (flip > 20)
state = OK;
else
return -1;
break;
case OK:
if (w == 0)
state = T0;
else
return -1;
break;
case T0:
gotBit(w);
break;
}
} else if (width >= 1500 && pos >= 9)
return 1;
else
return -1;
return 0;
}
};
class KSxDecoder : public DecodeOOK {
public:
KSxDecoder () {}
// see also <a data-cke-saved-href="<a href="http://www.dc3yc.homepage.t-online.de/protocol.htm" rel="nofollow">http://www.dc3yc.homepage.t-online.de/protocol.htm</a>" href="<a href="http://www.dc3yc.homepage.t-online.de/protocol.htm" rel="nofollow">http://www.dc3yc.homepage.t-online.de/protocol.htm</a>" rel="nofollow"><a href="http://www.dc3yc.homepage.t-online.de/protocol.htm" rel="nofollow">http://www.dc3yc.homepage.t-online.de/protocol.htm</a></a>
virtual char decode (word width) {
if (200 <= width && width < 1000) {
byte w = width >= 600;
switch (state) {
case UNKNOWN:
gotBit(w);
bits = pos = 0;
if (data[0] != 0x95)
state = UNKNOWN;
break;
case OK:
state = w == 0 ? T0 : T1;
break;
case T0:
gotBit(1);
if (!w)
return -1;
break;
case T1:
gotBit(0);
if (w)
return -1;
break;
}
} else if (width >= 1500 && pos >= 6)
return 1;
else
return -1;
return 0;
}
};
class FSxDecoder : public DecodeOOK {
public:
FSxDecoder () {}
// see also <a data-cke-saved-href="<a href="http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol" rel="nofollow">http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol</a>" href="<a href="http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol" rel="nofollow">http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol</a>" rel="nofollow"><a href="http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol" rel="nofollow">http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol</a></a>
virtual char decode (word width) {
if (300 <= width && width < 775) {
byte w = width >= 500;
switch (state) {
case UNKNOWN:
if (w == 0)
++flip;
else if (flip > 20)
state = T1;
else
return -1;
break;
case OK:
state = w == 0 ? T0 : T1;
break;
case T0:
gotBit(0);
if (w)
return -1;
break;
case T1:
gotBit(1);
if (!w)
return -1;
break;
}
} else if (width >= 1500 && pos >= 5)
return 1;
else
return -1;
return 0;
}
};
OregonDecoderV2 orscV2;
OregonDecoderV3 orscV3;
CrestaDecoder cres;
KakuDecoder kaku;
XrfDecoder xrf;
HezDecoder hez;
VisonicDecoder viso;
EMxDecoder emx;
KSxDecoder ksx;
FSxDecoder fsx;
#define PORT 2
volatile word pulse;
#if defined(__AVR_ATmega1280__)
void ext_int_1(void) {
#else
ISR(ANALOG_COMP_vect) {
#endif
static word last;
// determine the pulse length in microseconds, for either polarity
pulse = micros() - last;
last += pulse;
}
void reportSerial (const char* s, class DecodeOOK& decoder) {
byte pos;
const byte* data = decoder.getData(pos);
Serial.print(s);
Serial.print(' ');
for (byte i = 0; i < pos; ++i) {
Serial.print(data[i] >> 4, HEX);
Serial.print(data[i] & 0x0F, HEX);
}
// Serial.print(' ');
// Serial.print(millis() / 1000);
Serial.println();
decoder.resetDecoder();
}
void setup () {
Serial.begin(115200);
Serial.println("\n[ookDecoder]");
#if !defined(__AVR_ATmega1280__)
pinMode(13 + PORT, INPUT); // use the AIO pin
digitalWrite(13 + PORT, 1); // enable pull-up
// use analog comparator to switch at 1.1V bandgap transition
ACSR = _BV(ACBG) | _BV(ACI) | _BV(ACIE);
// set ADC mux to the proper port
ADCSRA &= ~ bit(ADEN);
ADCSRB |= bit(ACME);
ADMUX = PORT - 1;
#else
attachInterrupt(1, ext_int_1, CHANGE);
DDRE &= ~_BV(PE5);
PORTE &= ~_BV(PE5);
#endif
}
void loop () {
static int i = 0;
cli();
word p = pulse;
pulse = 0;
sei();
//if (p != 0){ Serial.print(++i); Serial.print('\n');}
if (p != 0) {
if (orscV2.nextPulse(p))
reportSerial("OSV2", orscV2);
if (orscV3.nextPulse(p))
reportSerial("OSV3", orscV3);
if (cres.nextPulse(p))
reportSerial("CRES", cres);
if (kaku.nextPulse(p))
reportSerial("KAKU", kaku);
if (xrf.nextPulse(p))
reportSerial("XRF", xrf);
if (hez.nextPulse(p))
reportSerial("HEZ", hez);
}
if (p != 0) {
if (viso.nextPulse(p))
reportSerial("VISO", viso);
if (emx.nextPulse(p))
reportSerial("EMX", emx);
if (ksx.nextPulse(p))
reportSerial("KSX", ksx);
if (fsx.nextPulse(p))
reportSerial("FSX", fsx);
}
}
Это выдает с передатчика noolight
Код: Выделить всё
HEZ: HEX: 04000200004C02
HEZ: HEX: 000200C04C00
И совместить все это с предыдущим скетчем.
Как сделать чтобы функция reportSerial() сохранял данные в глобальных переменных чтобы их можно использовать в дальнейшем.
Спасибо.
Последний раз редактировалось tammat Сб окт 19, 2013 8:18 pm, всего редактировалось 8 раз.
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Ну, судя по названию данная функция нужна для вывода в сериал порт информации. И пихать в неё еще какой-то функционал не вижу смысла, но можно конечно.tammat писал(а): Как сделать чтобы функция reportSerial() сохранял данные в глобальных переменных чтобы их можно использовать в дальнейшем.
Спасибо.
Если нужно чтобы reportSerial что-то еще делал кроме вывода в порт, то нужно или внутрь этой функции вписывать нужный функционал, или сделать так чтобы reportSerial возвращала данные.
И потом уже эти данные обрабатывать и что-то с ними делать.
Я, для своего орегоновского датчика, внутри reportSerial формирую строку с параметрами для передачи на сервер и возваращаю их.
Результат выполнения reportSerial скармливаю функции которая отправляет данные на сервак.
Пример loop()
Код: Выделить всё
void loop()
{
static int i = 0;
cli();
word p = pulse;
pulse = 0;
sei();
if (p != 0)
{
if (orscV2.nextPulse(p))
{
// получаем подготовленные к передаче на сервер данные
String vData = reportSerial("OSV2", orscV2);
// если данные есть, то передаём
if (vData != "")
{
// подключаемся к серверу и передаём данные
PostTemperatureDataToServer(vData);
}
}
}
}
1. Огромная просьба писать вместо [ code] [ code=php], примеры читаются удобней когда не весь код зелёным цветом.
2. Давайте выкладывать куда-ниудь опиcание работы с устройствами. Т.е пошаговую инструкцию как прикручивается к мажордому. С картинками, скетчами и т.д. Пример http://silvergate.ru/Download/OregonTem ... ar339P.pdf. До прикручивания именно к MDM руки еще не дошли, но думаю что не сложно.
На выходных постараюсь подготовить инструкцию к своему датчику.
Последний раз редактировалось LutsenkoDenis Пт окт 18, 2013 11:50 pm, всего редактировалось 1 раз.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
и я тут немного не понял что это за конструкция такая:
Что означает решетка?
Код вообще рабочий???
Код: Выделить всё
#if !defined(__AVR_ATmega1280__)
#else
#endif
Код вообще рабочий???
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 165
- Зарегистрирован: Пт янв 20, 2012 3:05 pm
- Благодарил (а): 9 раз
- Поблагодарили: 1 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Спасибо.
Я выложил оригинальный скетч с arduino.ru.
у себя я оставил только
Я выложил оригинальный скетч с arduino.ru.
у себя я оставил только
Код: Выделить всё
attachInterrupt(1, ext_int_1, CHANGE);
DDRE &= ~_BV(PE5);
PORTE &= ~_BV(PE5);
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Я предложил бы сделать wiki где все могут писать и дополнять статьи.
Очень быстро сделали полноценную документацию и рекомендации.
Ато очень трудно выискивать решения в форуме и отдельных статьях на сайте на которые ещё выйти трудно
Очень быстро сделали полноценную документацию и рекомендации.
Ато очень трудно выискивать решения в форуме и отдельных статьях на сайте на которые ещё выйти трудно
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
-
- Сообщения: 165
- Зарегистрирован: Пт янв 20, 2012 3:05 pm
- Благодарил (а): 9 раз
- Поблагодарили: 1 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Добрый день, коллеги!
Возможно ли в одном скетче использовать и контролер, и WEB Server (от уважаемого serg009).
Зачем это нужно в одном скетче?
1. Online передача данных по изменению данных на arduino на MDM.
2. Возможность изменять свойства входов/выходов, выполнять какие-то действия на arduino(Управление RF передатчиками, приборами и т.д.), получать и изменять их по запросу от MDM.
@LutsenkoDenis
Как из функции ReportSerial получить строку "OSV2:df00aaa88888f", где OSV2=df00aaa88888f=data, 16-код, получаемый RF-приемником.
Что-то не разберусь никак. а разборку кода проводить уже на сервере MDM
Как преобразовать полученный код (data) в текстовую строку???
Спасибо
@Ivan
Лучше оформить весь накопленный опыт в библиотеки для arduino, ну и wiki к ней
Возможно ли в одном скетче использовать и контролер, и WEB Server (от уважаемого serg009).
Зачем это нужно в одном скетче?
1. Online передача данных по изменению данных на arduino на MDM.
2. Возможность изменять свойства входов/выходов, выполнять какие-то действия на arduino(Управление RF передатчиками, приборами и т.д.), получать и изменять их по запросу от MDM.
@LutsenkoDenis
Как из функции ReportSerial получить строку "OSV2:df00aaa88888f", где OSV2=df00aaa88888f=data, 16-код, получаемый RF-приемником.
Что-то не разберусь никак. а разборку кода проводить уже на сервере MDM
Как преобразовать полученный код (data) в текстовую строку???
Спасибо
@Ivan
Лучше оформить весь накопленный опыт в библиотеки для arduino, ну и wiki к ней
-
- Сообщения: 165
- Зарегистрирован: Пт янв 20, 2012 3:05 pm
- Благодарил (а): 9 раз
- Поблагодарили: 1 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Добрый день, коллеги!
Подскажите данные уходят, но в MDM не свойства не появляются
Куски кода
В Serial вижу
Но данные до сервера не доходят....
Подскажите данные уходят, но в MDM не свойства не появляются
Куски кода
Код: Выделить всё
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 }; // MAC-адрес нашего устройства
byte ip[] = { 10, 0, 1, 21};
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = {10, 0, 1, 1 };
byte dns_server[] = { 10, 0, 1, 1 };
// ip-адрес удалённого сервера
byte rserver[] = { 10, 0, 1, 7 };//
Код: Выделить всё
sprintf(buf, "GET objects/?object=ExtDoor&op=set&p=humidity&v=%d",humidity(data));
sendHTTPRequest();
sprintf(buf, "GET objects/?object=ExtDoor&op=set&p=temp&v=%d",temperature(data));
sendHTTPRequest();
sprintf(buf, "GET objects/?object=ExtDoor&op=set&p=battery&v=%d",battery(data));
sendHTTPRequest();
}
Код: Выделить всё
/***********************************************************************************/
void sendHTTPRequest() {
Serial.println(buf);
if (rclient.connect(rserver, 80)) {
Serial.println("Data sended...Ok");
rclient.print(buf);
rclient.println(" HTTP/1.0");
rclient.print("Host: ");
sprintf(ipbuff, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
Serial.print("IP Arduino:");
Serial.print(ipbuff);
rclient.println(ipbuff); // ip адрес нашего контроллера в текстовом виде
rclient.print("Content-Type: text/html\n");
rclient.println("Connection: close\n");
delay(2000);
rclient.stop();
} else {
Serial.println("FAILED");
}
}
Код: Выделить всё
GET objects/?object=ExtDoor&op=set&p=humidity&v=34
Data sended...Ok
GET objects/?object=ExtDoor&op=set&p=temp&v=-26214
Data sended...Ok
GET objects/?object=ExtDoor&op=set&p=battery&v=90
Data sended...Ok
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
У меня была похожая проблема с отправкой.
У тебя в коде есть код который выводит в com-порт данные, причём без проверки соединения с портом.
Собственно, ардуина сидит и ждет соединения с ком-портом.
Либо убери вывод в порт либо оберни их проверкой.
Если что, см. pdf-ник, который я ранее прикладывал к сообщению. Там это есть.
з.ы. Это то, что было у меня.
У тебя в коде есть код который выводит в com-порт данные, причём без проверки соединения с портом.
Собственно, ардуина сидит и ждет соединения с ком-портом.
Либо убери вывод в порт либо оберни их проверкой.
Код: Выделить всё
if (Serial.available()) { // print }
з.ы. Это то, что было у меня.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch