Adatum
Ноя
25
2015

Просмотр температуры с датчика DALLAS 18B20 по сети.

1
По прозьбе одного из читателей публикую код и схему просмотра температуры с датчика DALLAS 18B20 по сети через сетевой контроллер ENC28J60.
Скачать скретч и схему в полном размере

для работы требуются библиотеки:
DallasTemperature — https://github.com/milesburton/Arduino-Temperature-Control-Library
ETHER_28J60 — https://github.com/muanis/arduino-projects

2
схема:
Без-имени-7
код:

#include "etherShield.h"
#include "ETHER_28J60.h"
#include <OneWire.h>
#include <DallasTemperature.h>

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};   
static uint8_t ip[4] = {192, 168, 0, 84};                      
static uint16_t port = 80;  

OneWire oneWire(7);
DallasTemperature sensors(&oneWire);
 
ETHER_28J60 ethernet;
 
void setup()
{ 
  ethernet.setup(mac, ip, port);
   sensors.begin();
}
 
void loop()
{
   sensors.requestTemperatures(); // Send the command to get temperatures
  if (ethernet.serviceRequest())
  {
    float getTemp = sensors.getTempCByIndex(0);
    
    ethernet.print("<html><head><title>Температура</title> </head>");
    ethernet.print("<body><CENTER><H2>Температура</H2></BR><H1>");
    ethernet.print(getTemp);
    ethernet.print(" ºC</H1>"); 
    ethernet.print("</CENTER></body></html>");
    ethernet.respond();
  }

}

Похожие статьи

Оставить комментарий

  • Спасибо. Все сработало. Не идеально гладко, но =)
    Подскажите, пожалуйста, как добиться того, чтобы конечный результат не округлялся до целого градуса, а округлялось до сотых, например 23,45 C

    P.S. У меня :
    Arduino Nano (Китай),
    Сетевой модуль ENC28J60 — http://qoo.by/I8w,
    Датчик тепла DS18B20
    Роутер TP-LINK TL-WR841N

    1) Если у кого затык с библиотекой, то она не запускалась на IDE 1.6.8, т.к. предназначена до версии 1.0.1, вроде.
    В итоге выбивало ошибку:

    In file included from C:\Users\SenDen\Documents\Arduino\libraries\etherShield/etherShield.h:25:0,

    from C:\Users\SenDen\Documents\Arduino\sketch_nov11a\sketch_nofv17a\sketch_nofv17a.ino:1:

    C:\Users\SenDen\Documents\Arduino\libraries\etherShield/ip_arp_udp_tcp.h:32:66: error: ‘prog_char’ does not name a type

    extern uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s);

    ^

    In file included from C:\Users\SenDen\Documents\Arduino\sketch_nov11a\sketch_nofv17a\sketch_nofv17a.ino:1:0:

    C:\Users\SenDen\Documents\Arduino\libraries\etherShield/etherShield.h:34:65: error: ‘prog_char’ does not name a type

    uint16_t ES_fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s);

    ^

    exit status 1

    Я решил эту проблему заменив все «prog_char» на «char» во всех файлах библиотек ETHER_28J60 и etherShield

    2) Модуль ENC28J60 не реагирует на сетевой кабель.
    Я его подключал сначала на 3.3 Вольта. Компилировалось, заливалось, красный светодиод горит на модуле, а оранжевый и зеленый, что возле сетевого кабеля — нет (извините, не знаю как они называются).
    В итоге знакомый подсказал, что пин 3.3 вольта у Arduino Nano — говно, тем более китайской. Лучше отдельно питать или втыкнуть на пин в 5 вольт, но модуль будет греться, так он делал не раз с другими модулями, работало.
    Я боялся, но его слова меня успокоили. В итоге сработало! (НО ВНИМАНИЕ!!! ПОСТУПАЙТЕ НА СВОЙ СТРАХ И РИСК!!! ЕСТЬ РИСК УБИТЬ МОДУЛЬ!!!) Перед тем, как идти на такие крайние меры, 7 раз подумайте!

    Всем успехов, если кому помог, пишите спасибо!

  • Дмитрий, здравствуйте!
    Я воспользовался Вашим кодом, но у меня вместо, русского языка, отображаются «иероглифы». Не подскажите как исправишь?

    • В браузере кодировку поменяй.

  • Здравствуйте Дмитрий! Большое Спасибо!