Занимаясь темой по управлению температурой, подумал, что не всем нужны возможности Линкус части Yun. И если ее не задействовать, плата неплохо подходит для проекта - код выходит небольшим, а проект - минимальной сложности. Yun - избыточно для этого? Ничуть. Если вы хотите отправлять данные с места, к которому нельзя бросить шнурок - Yun стоит дешевле, чем Uno + WiFi Shield. Таким образом, даже без Linux, Yun - вполне интересная плата. UPD. Указанное выше сохраняло актуальность до тех пор, пока не получила распространение плата ESP8266. Проект на ней выполняет абсолютно то же самое что и этот. Итак, просто шлем данные на Народный мониторинг. Используем любое количество датчиков DS18b20. Я использую три - на улице, в доме и в системе отопления. Вы - сколько хотите. Достаточно указать число в дефайнах. Соединения:
Подключим Arduino Yun и заведем ее в сеть. Инструкция находится здесь. Кратко что там написано. Будучи включенной впервые, Yun создает свою собственную сетку wi-fi, с соответствующим названием, к которой нужно подключиться с компьютера, набрать адрес 192.168.240.1 в браузере и пароль [arduino]. Находясь внутри, выбираете новое название для платы, устанавливаете свой пароль доступа, выбираете свою w-fi сетку, вводите ее пароль сохраняетесь и после чего плата сама перегружается. Обязательно поменять все указанное - иначе ардуино не сохранит информацию. Поскольку Yun выключает свою сеть, компьютер автоматом вернется в домашнюю сеть. Дальше с Yun работаем как с обычной платой через USB шнурок. Грузим в нее код, предварительно исправив строку String myMac = "#XX-XX-XX-XX-XX-XX"; вместо X - цифры, да желательно чтобы получилось что-то уникальное. Вот код: Код (C): // Пояснения по DS18B20 http://goo.gl/T4G93K #include <Bridge.h> #include <YunClient.h> #include <OneWire.h> #define PIN_1WIRE 2 // Сенсоры на ноге 2 #define NUMBER_OF_SENSORS 3 // Количество сенсоров OneWire ds(PIN_1WIRE); // Инициализируем 1Wire float temperature[NUMBER_OF_SENSORS]; // Массив данных температуры char server[] = "narodmon.ru"; // Адрес отправки данных YunClient client; // Так положено String myMac = "#XX-XX-XX-XX-XX-XX"; // Заменить ХХ на ваши уникальные цифры; byte countSend = 0; // Считаем попытки установки связи с сервером void setup(void) { Bridge.begin(); } void loop(void) { GetTemperature(temperature); // Измерим и запишем в массив температуру. countSend = 0; // Обнуляем счетчик попыток отправки данных do { if (client.connect(server, 8283)) { // Отправляем на Народный мониторинг client.println(myMac); // Сначала Мак-адрес для определения свой/чужой // Данные из ячеек отправляем на сервер for (byte ii = 0; ii < NUMBER_OF_SENSORS; ii++){ client.print("#Sensor"); client.print(ii); client.print("#"); client.println(temperature[ii], DEC); } client.println("##"); countSend = 5; // В случае удачи переполняем счетчик } else { countSend++; // Неудача - увеличиваем счетчик delay(1500); // Подождем (твою маму...) } }while (countSend < 5); // Не более 5 попыток отправки unsigned long tm = millis(); // Если что-то нам шлют в ответ - читаем while(millis() - tm < 5000) { // но не более 5 секунд if (client.available()) { char c = client.read(); } } client.stop(); // Рарываем соединение delay(600000); // Ждем 10 минут как лохи (это я) } // Если не лохи - можно поиграть с millis() // Функция опроса датчиков принимает указатель на массив void GetTemperature (float * temperatureAddress) { // Все стандартно из примера библиотеки 1 Wire byte i ; int tempCounter = 0; byte present = 0; byte data[9]; // Только это не стандартно, в библиотеке зачем-то 12 в массиве byte addr[8]; float celsius; while (1) { // Если надо - по адресу http://goo.gl/T4G93K все пояснения кода if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); for ( i = 0; i < 9; i++) { data[i] = ds.read(); } int16_t raw = (data[1] << 8) | data[0]; celsius = (float)raw / 16.0; if (tempCounter < NUMBER_OF_SENSORS) { // Заполняем массив данными *(temperatureAddress + tempCounter) = celsius; } tempCounter++; } } Это все. Дальше регистрируемся на сайте Народного мониторинга и наблюдаем за своими данными. UPD. Друзья! Я знаю, что некоторые повторяют эту схему, а некоторые боятся браться за нее. Кто повторил - отпишитесь в теме, и мне приятно и читающим спокойнее.