Espruino:Примеры/Беспроводной температурный датчик

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Беспроводной температурный датчик[1]

В этом руководстве рассказывается, как быстро и просто сделать температурный датчик. В нашем проекте одна Espruino будет считывать данные с температурного датчика DS18B20 и каждые 10 секунд передавать их при помощи беспроводного NRF-модуля, а другая Espruino будет принимать эти данные и рисовать их на LCD-дисплее.

Нам понадобятся

Подсоединение

Первая Espruino (передатчик)

  • О том, как подключить беспроводной модуль NRF24L01+, читайте в этой статье.
  • Температурный датчик DS18B20 подключается следующим образом:
Провод датчика Espruino Резистор на 4.7 кОм
Чёрный GND
Красный 3.3v 1-ый провод
Белый A1 2-ой провод

Вторая Espruino (приёмник)

Код

Подключитесь Espruino-передатчику, скопируйте код ниже в правую часть IDE, а затем кликните на кнопку загрузки кода в центре IDE.

SPI1.setup({sck:A5, miso:A6, mosi:A7});
var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );
var ow = new OneWire(A1);
var sensor = require("DS18B20").connect(ow);
function onInit() {
  nrf.init([0,0,0,0,2], [0,0,0,0,1]);
}
onInit();
setInterval(function() {
  var temperature = sensor.getTemp();
  nrf.sendString(""+temperature);
}, 10000);

Теперь подключитесь ко второй Espruino (приёмнику) и загрузите на неё вот этот код:

SPI1.setup({sck:A5, miso:A6, mosi:A7});
var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );
SPI3.setup({ baud: 1000000, sck:B3, mosi:B5 });
var g;
function onInit() {
  nrf.init([0,0,0,0,1], [0,0,0,0,2]);
  // Мы настраиваем LCD-дисплей здесь,
  // потому что его нужно инициализировать при запуске платы:
  g = require("PCD8544").connect(SPI3,B6,B7,B8);
}

// Рисуем температуру на LCD-дисплее:
function showTemperature(temp) {
  g.clear();
  g.setFontBitmap();
  g.drawString("Temp",1,0);
  g.drawLine(0,10,84,10);
  g.setFontVector(20);
  g.drawString(temp,1,15);
  g.flip();
}

// Постоянно проверяем, не пришли ли новые данные...
dataLine = "";
setInterval(function() {
  while (nrf.getDataPipe() !== undefined) {
    var data = nrf.getData();
    for (var i in data) {
      var ch = data[i];
      if (ch===0 && dataLine!=="") {
        // Если получили «0» (конец строки),
        // показываем всё, что получили:
        showTemperature(dataLine);
        dataLine = "";
      } else if (ch!==0) {
        dataLine += String.fromCharCode(ch);
      }
    }
  }
}, 50);

onInit();

Теперь LCD-дисплей будет показывать данные о температуре, полученные от Espruino-передатчика, обновляя их каждые 10 секунд. Вот и всё! У нас получился беспроводной температурный датчик. Этот код можно расширить следующим образом:

  • Воспользовавшись кодом из этой статьи, чтобы сделать беспроводной терморегулятор.
  • Нарисовав график, показывающий динамику изменения температуры.
  • Задействовав больше одного температурного датчика.
  • Организовав запись температурных данных на SD-карту.

И так далее.

См.также

Внешние ссылки