Я совершенно НЕ прошу сделать это мне. Я прошу помочь понять с чего начать и хотя бы исходя из плана ткнуть пальцем на железки которые необходимо заказать. Если б я знал какие здесь все недосягаемые высшие умы и не сунулся бы.
Я совершенно НЕ прошу сделать это мне. Я прошу помочь понять с чего начать и хотя бы исходя из плана ткнуть пальцем на железки которые необходимо заказать. Если б я знал какие здесь все недосягаемые высшие умы и не сунулся бы.
Железок полно на али, есть готовые метеостанции с блэкджеком и..., т.е. с флюгерами и анемометрами и прочими датчиками, которые выдают инфу по RS-485. Стоят не так дорого - в пределах десятки, зато никакого геморроя и секаса.
Я прошу помочь понять с чего начать и хотя бы исходя из плана ткнуть пальцем на железки которые необходимо заказать.
Может, оно вам не надо, и проще готовое купить? ;)
А я поддержу. Вы потратите кучу времени, чтобы разобраться с программированием и электроникой. И по деньгам Вы вряд ли много выиграете, если будете покупать отдельные детали. ИМХО на ардуине стоит что-то делать, только в двух случаях: если готового девайса не существует в природе, и если он существует, но стоит непомерно дорого.
Метеостанция, которуую Вы хотите достаточно сложная. Это совсем не то, что Вы показали на первой картинке, где есть только датчики температуры и давления. Анемометр, флюгер, датчик освещенности это стоит денег и потребует достаточно продвинутых знаний в программировании. Передача данных по WiFi отдельная тема, отдельные модули и отдельный геморрой. В общем, я бы тоже купил готовый прибор.
Но если очень хочется самому сделать подобную метеостанцию, вперед. Начните с того, что Ваша метеостанция должна делать. Что-то типа техзадания. Отсюда можно будет уже и прикидывать какие железки покупать и как их соединять друг с другом.
ИМХО на ардуине стоит что-то делать, только в двух случаях: если готового девайса не существует в природе, и если он существует, но стоит непомерно дорого.
Я бы сказал несколько иначе: на ардуине стоит что-то делать, только в двух случаях: если готового девайса не существует в природе, или если сам процесс изготовления приносит удовольствие*.
Потому как hand made не может стоить дешевле, чем серийное производство. Либо по сумме самоделка окажется дороже промышленного образца, либо вся экономия выйдет за счет качества.
* Примечание: а за удовольствие, как известнео, нужно платить.
Serial.printf(buf); //ошибка println должно быть ?
кажется у вас ошибка ?
int a = 10;
char buf[3];
sprintf(buf, "0x%08X",uint32_t(&a));
Serial.println(buf);
иными словами мы получаем некоторое число (являющееся адресом) uint32_t(&a), приводим его к шеснадцатиричному виду 0х%08х, кидаем полученное значение в переменную buf и выводим.
а теперь вопрос: почему при изменении buf[3] на buf['s'] и a = 10 на a = 11 адрес остается одинаковым? неужели автоматически компилятор заносит эти числа постоянно на один и тот же адрес ?
в ардуине указатели занимают 2 байта, uint32_t избыточен, соотвецтвенно надо
sprintf(buf, "0x%04X",uint16_t(&a));
и не забывать, что buf[] хранит результирующую строку длиной как минимум 6 символов, поэтому памяти под нее надо отвести достаточно. 6+завершающий ноль = 7 символов. Что и было написано
char buf[7];
Я пердуперждал, реализация C++ в Дуне отличается от Visual Studio.
а теперь вопрос: почему при изменении buf[3] на buf['s'] и a = 10 на a = 11 адрес остается одинаковым? неужели автоматически компилятор заносит эти числа постоянно на один и тот же адрес ?
и a и buf являются локальными переменными, их адрес может быть каким угодно, но одинаковым в одних и тех же условиях. Поменяй местами определение buf и a и убедись, что адрес а тоже изменился.
Я совершенно НЕ прошу сделать это мне. Я прошу помочь понять с чего начать и хотя бы исходя из плана ткнуть пальцем на железки которые необходимо заказать. Если б я знал какие здесь все недосягаемые высшие умы и не сунулся бы.
Я совершенно НЕ прошу сделать это мне. Я прошу помочь понять с чего начать и хотя бы исходя из плана ткнуть пальцем на железки которые необходимо заказать. Если б я знал какие здесь все недосягаемые высшие умы и не сунулся бы.
Железок полно на али, есть готовые метеостанции с блэкджеком и..., т.е. с флюгерами и анемометрами и прочими датчиками, которые выдают инфу по RS-485. Стоят не так дорого - в пределах десятки, зато никакого геморроя и секаса.
Может, оно вам не надо, и проще готовое купить? ;) Вот такое, например: https://ru.aliexpress.com/item/RS485-10/32844407554.html?spm=a2g0v.10010108.1000014.23.75745e4doFSntV&traffic_analysisId=recommend_3035_null_null_null&scm=1007.13338.80878.000000000000000&pvid=1171e2fa-c8e2-43c1-ae4d-2bc62d48ed14&tpp=1
Я прошу помочь понять с чего начать и хотя бы исходя из плана ткнуть пальцем на железки которые необходимо заказать.
Может, оно вам не надо, и проще готовое купить? ;)
А я поддержу. Вы потратите кучу времени, чтобы разобраться с программированием и электроникой. И по деньгам Вы вряд ли много выиграете, если будете покупать отдельные детали. ИМХО на ардуине стоит что-то делать, только в двух случаях: если готового девайса не существует в природе, и если он существует, но стоит непомерно дорого.
Метеостанция, которуую Вы хотите достаточно сложная. Это совсем не то, что Вы показали на первой картинке, где есть только датчики температуры и давления. Анемометр, флюгер, датчик освещенности это стоит денег и потребует достаточно продвинутых знаний в программировании. Передача данных по WiFi отдельная тема, отдельные модули и отдельный геморрой. В общем, я бы тоже купил готовый прибор.
Но если очень хочется самому сделать подобную метеостанцию, вперед. Начните с того, что Ваша метеостанция должна делать. Что-то типа техзадания. Отсюда можно будет уже и прикидывать какие железки покупать и как их соединять друг с другом.
Спасибо за ваш ответ!
ИМХО на ардуине стоит что-то делать, только в двух случаях: если готового девайса не существует в природе, и если он существует, но стоит непомерно дорого.
Я бы сказал несколько иначе: на ардуине стоит что-то делать, только в двух случаях: если готового девайса не существует в природе, или если сам процесс изготовления приносит удовольствие*.
Потому как hand made не может стоить дешевле, чем серийное производство. Либо по сумме самоделка окажется дороже промышленного образца, либо вся экономия выйдет за счет качества.
* Примечание: а за удовольствие, как известнео, нужно платить.
здравствуйте. пытаюсь разобраться с элементарным - указатели и ссылки.
просмотрел несколько уроков по с++ , почитал литературу - вроде все понятно.
решил вывести адрес ссылки переменной в монитор порта. в с++ все просто и работает, на в ардуино компилятор не хочет компилировать скетч.
#include <SoftwareSerial.h> void setup() { Serial.begin(9600); int a = 10; Serial.println(&a); }или я что-то упустил или чего - то не понимаю. указанный ниже код работает.
#include <SoftwareSerial.h> void setup() { Serial.begin(9600); int a = 10; int *x = &a; Serial.println(*x); }Тип надо преобразовывать
6 Serial.println(uint16_t(&a));
выведется адрес переменной а
Тип надо преобразовывать
6 Serial.println(uint16_t(&a));
выведется адрес переменной а
еще больше запутался)
в уроках на с++ выводилось значение в формате 0х00000000, здесь же выводится число 2298. как так ?
Тогда надо выводить с форматированием. Через функцию sprintf, формат %4X
C++ на компе и на дуне слегка отличаются.
спасибо! буду дальше разбираться)
char buf[7];
sprintf(buf, "0x%4X",uint16_t(&a));
Serial.printf(buf);
char buf[7];
sprintf(buf, "0x%4X",uint16_t(&a));
Serial.printf(buf); //ошибка println должно быть ?
кажется у вас ошибка ?
иными словами мы получаем некоторое число (являющееся адресом) uint32_t(&a), приводим его к шеснадцатиричному виду 0х%08х, кидаем полученное значение в переменную buf и выводим.
а теперь вопрос: почему при изменении buf[3] на buf['s'] и a = 10 на a = 11 адрес остается одинаковым? неужели автоматически компилятор заносит эти числа постоянно на один и тот же адрес ?
да, у меня ошибка, должно быть
Serial.println(buf);
в ардуине указатели занимают 2 байта, uint32_t избыточен, соотвецтвенно надо
sprintf(buf,"0x%04X",uint16_t(&a));и не забывать, что buf[] хранит результирующую строку длиной как минимум 6 символов, поэтому памяти под нее надо отвести достаточно. 6+завершающий ноль = 7 символов. Что и было написаноchar buf[7];
Я пердуперждал, реализация C++ в Дуне отличается от Visual Studio.
а теперь вопрос: почему при изменении buf[3] на buf['s'] и a = 10 на a = 11 адрес остается одинаковым? неужели автоматически компилятор заносит эти числа постоянно на один и тот же адрес ?
snprintf() - чтобы буфер не порвало.