Помогите разобраться.
- Войдите на сайт для отправки комментариев
Пт, 03/02/2017 - 20:24
Здравствуйте! В общем пытаюсь вывести данные из Arduino в сеть. Использую библиотеку EtherCard, все вроде бы получилось, но есть одна проблемка. Есть на сервере скрипт, он принимает GET данные и записывает их в базу данных. У меня есть переменная Temperature, но я не знаю как ее воткнуть в этот код, после value=
ether.browseUrl(PSTR("/arduino.php?value="), "bar", website, my_callback);
Можете подсказать, как её выводить?
Сам скетч:
#include <EtherCard.h>
#include <math.h>
float Thermometer(float RawADC) {
float Temperature;
Temperature = 1.25*(480 - RawADC);
return Temperature;
}
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
static uint32_t timer;
const char website[] PROGMEM = "example.com";
// called when the client request is complete
static void my_callback (byte status, word off, word len) {
Serial.println("----------------------");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println();
Serial.println("----------------------");
}
void setup () {
Serial.begin(9600);
Serial.println("[Arduino Client]");
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println( "Failed to access Ethernet controller.");
if (!ether.dhcpSetup())
Serial.println("Failed DHCP.");
ether.printIp("IP: ", ether.myip);
ether.printIp("GATEWAY: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
if (!ether.dnsLookup(website))
Serial.println("Failed DNS.");
ether.printIp("SERVER: ", ether.hisip);
}
void loop () {
float Temperature;
Temperature = Thermometer(analogRead(5));
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 5000;
ether.browseUrl(PSTR("/arduino.php?value="), "bar", website, my_callback);
}
}
И еще вопрос, что это за строка: "bar" ?
ether.browseUrl(PSTR("/arduino.php?value="), "bar", website, my_callback);За что она отвечает? (:
как ее воткнуть в этот код, после value=
ether.browseUrl(PSTR("/arduino.php?value="), "bar", website, my_callback);Именно в этот - никак.
Можете подсказать, как её выводить?
Заведите буфер, скопируйте туда "/arduino.php?value=" (или изначально её там держите), а потом прикопируйте в хвост свою температуру. Например, если температура - целое, то можно сделать примерно так:
И еще вопрос, что это за строка: "bar" ?
Вы не поняли, мне не нужно указывать температуру в ручную. Мне нужно что бы она сама записывалась.
Допустим переменная :
Должна передавать значение, которое содержится в функции:
float Thermometer(float RawADC) { float Temperature; Temperature = 1.25*(480 - RawADC); return Temperature; }И уже тогда записывать на сервер. Если можете, приведите пример в моём коде. Заранее благодарю.
Вы не поняли, мне не нужно указывать температуру в ручную. Мне нужно что бы она сама записывалась.
Это Вы не поняли. В примера всехда пишется присваивание, т.к. откуда мне знать где, как с каого датчика Вы берёте температуру?
Строку 2 моего примера следует читать как "откудато, с супер-датчика, взята температура и присвоена переменной temperature. Дальше я показываю Вам как её в буфер запихать. Вам ведь это надо, чтобы она в буфере оказалась, так?
Строку 2 моего примера следует читать как "откудато, с супер-датчика, взята температура и присвоена переменной temperature. Дальше я показываю Вам как её в буфер запихать. Вам ведь это надо, чтобы она в буфере оказалась, так?
Ну это пока не датчик, а обычная термопара, с которой мы сделали градусник, подобрав правильную формулу и коэффициент.
А данные я получаю с 5 аналогового выхода)
Не получается реализовать. Не пойму ничего(
Да, на здоровье. Вы ведь в первом посте спросили как запихать Вашу температуру в строку, чтобы сформировать запрос. Я и показываю Вам как её запихать в строку. А откуда Вы её взяли - как разница?
Да, на здоровье. Вы ведь в первом посте спросили как запихать Вашу температуру в строку, чтобы сформировать запрос. Я и показываю Вам как её запихать в строку. А откуда Вы её взяли - как разница?
Извините, у Вас есть профили в социальных сетях, хотелось бы с Вами пообщаться на прямую как говорится (:
Нету
Вот Вы выше приводили решение. Не могли бы Вы показать, как реализовать его именно в этом коде? :)
#include <EtherCard.h> #include <math.h> float Thermometer(float RawADC) { float Temperature; Temperature = 1.25*(480 - RawADC); return Temperature; } static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; static uint32_t timer; const char website[] PROGMEM = "example.com"; static void my_callback (byte status, word off, word len) { Serial.println("----------------------"); Ethernet::buffer[off+300] = 0; Serial.print((const char*) Ethernet::buffer + off); Serial.println(); Serial.println("----------------------"); } void setup () { Serial.begin(9600); Serial.println("[Arduino Client]"); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) Serial.println( "Failed to access Ethernet controller."); if (!ether.dhcpSetup()) Serial.println("Failed DHCP."); ether.printIp("IP: ", ether.myip); ether.printIp("GATEWAY: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); if (!ether.dnsLookup(website)) Serial.println("Failed DNS."); ether.printIp("SERVER: ", ether.hisip); } void loop () { ether.packetLoop(ether.packetReceive()); if (millis() > timer) { timer = millis() + 50000; ether.browseUrl(PSTR("/arduino.php?value="), "bar", website, my_callback); } }Ну вообще что то не пойму (:
Правильно ли я понял, что Вам надо не помочь разобраться, а помочь исправить чужой код, которого Вы не понимаете?
В общем так, я не буду разбираться во всём коде, помогу лишь вствить формирование строки - запроса о чём Вы и просили изначально. Если с этим всё в порядке, то дальше сами.
Перед строкой 46 Вам надо запросить температуру. Так и делаете.
float temperature = Thermometer(); Serial.print("Temperature: "); Serial.println(temperature);Печать нужна для проверки, чтобы убедиться. что температура пришла адекватная.
Дальше Вам надо запихать её в буфер. Пихаете примерно так, как я показывал, только раз уж это float, то вместо itoa испольуете dtostrf.
char url[] = "/arduino.php?value=???????"; char * temperatureHolder = strchr(url, '=') + 1; dtostrf(temperature, -6, 2, temperatureHolder); Serial.print("URL="); Serial.println(url); // для контроля, что получилосьну, и, наконец, саму строку 46 заменяеете на такую же, но с использование буфера url
если в печатях, что я вставлял всё печатается нормально, значит помещение температуры в буфер работает правильно. Если при этом не работает скетч, ищите проблему в других местах.
Вот что получается
Это что?
Вы покажите монитор порта, куда выводятся печати, которые я вставлял в код. Только лучше копипастой, а не картинкой
#include <EtherCard.h> #include <math.h> float Thermometer(float RawADC) { float Temperature; Temperature = 1.25*(480 - RawADC); return Temperature; } static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[700]; static uint32_t timer; const char website[] PROGMEM = "example.com"; static void my_callback (byte status, word off, word len) { Serial.println("----------------------"); Ethernet::buffer[off+300] = 0; Serial.print((const char*) Ethernet::buffer + off); Serial.println(); Serial.println("----------------------"); } void setup () { Serial.begin(9600); Serial.println("[Arduino Client]"); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) Serial.println( "Failed to access Ethernet controller."); if (!ether.dhcpSetup()) Serial.println("Failed DHCP."); ether.printIp("IP: ", ether.myip); ether.printIp("GATEWAY: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); if (!ether.dnsLookup(website)) Serial.println("Failed DNS."); ether.printIp("SERVER: ", ether.hisip); } void loop () { ether.packetLoop(ether.packetReceive()); if (millis() > timer) { timer = millis() + 5000; float Temperature = Thermometer(analogRead(5)); Serial.print("Temperature: "); Serial.println(Temperature); char url[] = "/arduino.php?value=???????"; char * TemperatureHolder = strchr(url, '=') + 1; dtostrf(Temperature, -6, 2, TemperatureHolder); Serial.print("URL="); Serial.println(url); // для контроля, что получилось ether.browseUrl(url, "bar", website, my_callback); } }Правильно я сделал?
Это что?
Вы покажите монитор порта, куда выводятся печати, которые я вставлял в код. Только лучше копипастой, а не картинкой
URL=/arduino.php?value=181.25 - Это у Вас полный URL?
Это где потеряли - http://185.50.25.25/arduino.php?value=181.25
Вот к примеру этот пост доступен и так http://78.46.72.113/forum/programmirovanie/pomogite-razobratsya-5#commen...
.
Ну, вот, видите. Вы о чём спрашивали в первом посте?
У меня есть переменная Temperature, но я не знаю как ее воткнуть в этот код, после value=
ether.browseUrl(PSTR("/arduino.php?value="), "bar", website, my_callback);Можете подсказать, как её выводить?
Теперь смотрим на Ваш монитор:
Temperature: 181.25
URL=/arduino.php?value=181.25
Ваша переменная temperature вставилась в url, как Вы просили? Вставилась! Причём правильно вставилась.
Стало быть вопрос из Вашего первого поста решён. Так? Поздравляю.
Других вопросов от Вас не поступало.
У меня идет запрос на доменное имя, а не на IP, так как он не прилинкован.
Спасибо Вам большое, со всем разобрался. Всё работает. Без Вас бы ничего не получилось. (:
Евгений Петрович, это Вам или мне? (насчёт спасибо)
Евгений Петрович, это Вам или мне? (насчёт спасибо)
Евгению (:
Вот так всегда - "кто бы что бы не освоил, а Никита всё присвоил" )))