Передача адреса датчика в базу данных и обратно.

Romash
Offline
Зарегистрирован: 09.11.2017

Форумчане, нужна помощь.

Задача: андуринка и несколько температурных датчиков, нужно сохранять в базе данных mysql информацию об адресах датчиков.

Как передавать данные на веб сервер -разобрася- ве работает.

Проблема в следующем:

адрес датчика хранится в переменной типа 

DeviceAddress sensor= {0x28, 0x42, 0x91, 0x2F, 0x02, 0x00, 0x00, 0xDA };

Чтобы передать ее GET запросом на сервер мне нужно преобразовать этот адрес в строку - с этим тоже разобрался 
 

  for (uint8_t j = 0; j < 8; j++)  
  {  
    if (sensor[j] < 16) 
    sensor_adress+="0";
    sensor_adress+=String(sensor[j], HEX); 
  }

Получаю строку и все ок 2842912f020000da

НО проделав манипуляции на вебсервере, мне нужно отдать ардуинке снова адрес датчика, и далее получив СТРОКУ мне нужно ее преобразовать в тип DeviceAddress , как это сделать? 
Т.е. как из такой строки обратно получить массив DeviceAddress ?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Вопрос: Как вытащить яйцо из стеклянной бутылки не повредив ни яйцо, ни бутылку.
Ответ: Как запихивал, так и вытаскивай.

Это я к тому, если ты умеешь преобразовать массив байтов в строку, так преобразуй обратно точно также.

Romash
Offline
Зарегистрирован: 09.11.2017

Наиценнейший совет)) Благодарю!)
Чтоб вам так врачи советовали) 
"Умеешь геморой зарабатывать - умей и лечить" )) 

Я написал - т.к не вышло у меня,  и если есть пример кода - буду реально благодарен)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Может как то так

uint8_t hex2int(char in){
  if (in<='9') return (in-'0'); else return (in-'A'+10);
}

void addr2Sens(String addr, uint8_t* sensor) {
 addr.toUpperCase();
 for(uint8_t i=0; i<8; i++){
    sensor[i]= hex2int(addr[i*2])*16+hex2int(addr[i*2+1]);          
 }
}

void loop() {

 String addr="2842912f020000da";
 uint8_t sensor[8];
 addr2Sens(addr,sensor);
 //...
 
}

 

Romash
Offline
Зарегистрирован: 09.11.2017

Brokly , спасибо!) буду пробовать.

Я паралельно еще дошел до того что я беру просто 

значения sensor[i] в цикле и тупо присваиваю их строковой переменной с неким разелителем

срабатывает приведение типов автоматом .

далее когда нужно обратно я парсю эту строчку в строковый масив использую разделитель 

и потом поэлементно масиву с типом device address присваиваю элемнты строкового массива с toInt();

И заработало)))  

попробую сегодня ваш вариант) еще раз спасибо)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Если мне память не изменяет, то toInt() воспринимает "10" например как десятичную десятку, а "x10" - как шестнадцатиричную. Могу ошибаться, проверьте сами, счаз не могу. 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Romash пишет:

Я написал - т.к не вышло у меня,  и если есть пример кода - буду реально благодарен)

Так ты покажи, как у тебя не вышло! А то сдайтся мне, что и не пробовал ни хрена

Romash
Offline
Зарегистрирован: 09.11.2017

Ворота пишет:

Romash пишет:

Я написал - т.к не вышло у меня,  и если есть пример кода - буду реально благодарен)

Так ты покажи, как у тебя не вышло! А то сдайтся мне, что и не пробовал ни хрена

 

Уважаемый, Ворота

Вы написали уже 2 поста на мой запрос, обоими вашими ответами вы никак не пытались помочь, а просто флудили, да еще и тоном как будто я вам обязан чем-то.

Вопрос: зачем вообще заходить на чей то запрос и тупо словоблудить?

Если у вас просто такой фетиш, то предлагаю идти на сайты знакомств или ананистов, там полно таких мастурбаторов и вам там будет комфортно. 

В любом сулучае удачного и солнечного дня)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А тут тебе кто-то обязан чем-то? Тут помогают тому, кто делает и не выходит, а не тому кто клянчит напишыте мне скетч.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

"Эй, Семен занунь ей под ребро" (ЦЫ) :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Перо обломаю.

Romash
Offline
Зарегистрирован: 09.11.2017

Я изначально описал задачу и что многое по ней уже решил, т/е я тружусь. Следующий мой пост что я уже нашел один вариант решения. Те уличать меня в бездействии не стоит.

И снова я не понимаю зачем ТЫ (коль мы перешли на ты) залез в этот пост и учишь меня как нужно писать?

Ты тут царь? авторитет? пахан? смотрящий? какие термины знакомы?

Не можешь писать по существу тут иди к следующему посту, нигде не можешь писать по существу иди с коллегой "Ворота" уже писал ранее куда.

Не забывайте зачем форум создан, чтобы делится опытом. Если вы не хотите(не можете) им делится в частности со мной, то просто проходи мимо) Зачем плодить негатив?

Всем приятного дня!)

Romash
Offline
Зарегистрирован: 09.11.2017

brokly пишет:

Может как то так

uint8_t hex2int(char in){
  if (in<='9') return (in-'0'); else return (in-'A'+10);
}

void addr2Sens(String addr, uint8_t* sensor) {
 addr.toUpperCase();
 for(uint8_t i=0; i<8; i++){
    sensor[i]= hex2int(addr[i*2])*16+hex2int(addr[i*2+1]);          
 }
}

void loop() {

 String addr="2842912f020000da";
 uint8_t sensor[8];
 addr2Sens(addr,sensor);
 //...
 
}

 

 

Brokly , еще раз спасибо, попробовал получилось!) теперь имею два вариант)