ЦИФРОВОЙ USB ТЕРМОДАТЧИК
ODTEMP-1W (TOIC)
Миниатюрный программируемый термометр с USB подключением
Как это работает?
USB термодатчик ODTEMP-1W является более продвинутой версией датчика ODTEMP-1U и позволяет пользователю модифицировать встроенную в устройство программу. В устройстве работает язык программирования для IoT устройств - TOIC.
Для чего нужен программируемый USB термометр
Возможность изменить встроенную программу позволяет значительно расширить возможности применения такого устройства
  • 1
    Корректировка значений
    Корректировка, фильтрация, сглаживание: множество действий можно реализовать при работе с показаниями термодатчика. Например, при необходимости учитывать влияние внешних факторов в разное время суток и т.п.
  • 2
    Опасные значения
    Возможность записать крайние значения сразу в датчик - может оказаться критически важной возможностью устройства для определения причин в нештатных ситуациях.
  • 3
    Дополнительный функционал
    Отправка управляющей команды на ПК по перегреву, по времени или написать свой произвольный код: всё в руках разработчика.
Характеристики
1. Интерфейс подключения: USB
2. Шаг измерения температуры: 0.5С
3. Габариты: 13х18х58 мм
4. Работает в Win7/Linux/macOS и других ОС
5. Встроенный язык программирования TOIC для написания своих программ в датчике.

Установка USB термометра ODTEMP-1W
1. Термодатчик устанавливается в USB разъём управляющего ПК.
2. При выборе места установки следует избегать способов подключения, при которых сам датчик нагревается от материнской платы ПК, т.к. это может негативно сказаться на точности показаний.
3. Для работы с устройством мы предлагаем open-source демонстрационное ПО. Пользователь может самостоятельно реализовать дополнительный функционал общения с устройством.
Программа-монитор ODTEMP-1W
Кроссплатформенная графическая
программа-монитор
Программа под Windows/Linux/macOS с открытым исходным кодом (golang) подключается к устройству через последовательный порт и обеспечивает следующий функционал:
  • чтение текущей температур
В программу может быть легко добавлен следующий функционал:
  • хранение истории значений (лог)
  • хранение граничных значений: минимум-максимум
Температура
По запросу можно получать температуру устройства. Можно модифицировать программу так, чтобы устройство отправляло посылки и без запроса: по таймеру или событию (превышению и т.п.)
В примере программы RUN_MODE 1 задает самостоятельную передачу данных по таймеру каждые SEND_PERIOD_MS 60000 миллисекунд.

06/16/2020 16:33:10 Temperature: 26.2
06/16/2020 16:33:21 Temperature: 26.2
06/16/2020 16:33:23 Temperature: 26.2
06/16/2020 16:33:34 Temperature: 26.2
06/16/2020 16:33:36 Temperature: 26.2
Упрощённый пример считывания температуры на Python3
Пример получения данных с термодатчика.

#!/usr/bin/python3
'''
Example:
python3 ./odtemp-mon.py
'''
from time import sleep
import serial


def run():
    port = '/dev/ttyACM0'
    ser = serial.Serial(port)
    while True:
        ser.write(b'~G')
        ser_data = ser.readline()
        if ser_data:
            data = ser_data.decode("utf-8")
            print('Read from serial (repl to ~G): {0}'.format(data.strip()))
            if data.startswith('~G'):
                print('Temperature is {0}'.format(float(data[2:])))
        else:
            print('sensor error')
        sleep(1)


if __name__ == "__main__":
    run()
Программируем сами
Модификация встроенного ПО
Сердцем устройства является микроязык TOIC, который позволяет легко модифицировать встроенное программное обеспечение устройства.
Код, работающий в устройстве по-умолчанию.
Код, который работает в устройстве по-умолчанию.

//Main settings
#define SEND_PERIOD_MS 60000
#define STEP_DELAY_MS 200
#define RUN_MODE 1

//global vars
var t_answ = ["~GEEE\n", "~G%d\n", "~G0%d\n", "~G00%d\n", "~G000%d\n"];

var io_setup() {
    UART0.CFG = UART_MODE_PLAIN | UART_CONFIG_START;
    DS18.INIT = DS18_PORT_B|8;
    __enable_irq();
}

var get_temp()
{  
  if(DS18.INIT == 1)
  {
    DS18.VALUE = 1;
    delay(100);
    return DS18.VALUE-2730; //K -> C
   }else
   return 0xFFFF; //Error
}

var temp_sender(var temp) {
    var idx = 4;
    if (temp>1280) { idx = 0; }
    else if (temp>1000) { idx = 1; }
    else if (temp>100) { idx = 2; }
    else if (temp>10) { idx = 3; }
    sprintf(&UART0.TX, t_answ[idx], temp); 
}

var _msg() {
    if(MSG.PORT == 4) {
        memcpy(&RING.BUF, &MSG.RX, MSG.SIZE);       
    }
}

var temp_perioder()
{
    temp_sender(get_temp());
    timer(SEND_PERIOD_MS, temp_perioder);
}

var main() {
    var c, temp;
    var pstate = 0;
    
     if((RING.ALLOC = 16) != 16) {
        return 1;
    }

#if RUN_MODE
    timer(SEND_PERIOD_MS, temp_perioder);    
#endif
    io_setup();
    SYS.WDG = 1;
    while(1)
    {
        SYS.WDG = 42;
        if(RING.QUEUE > 0) {
           c = RING.PULL;
           if (c == '~') {pstate = 1;}
           else {
              pstate = 0;
              switch (c) {
                case 'G':
                    temp_sender(get_temp());
                    break;
                default:
                    break;
              }
           }
        }else {
            delay(STEP_DELAY_MS);
        }    
    }
    return 0;
}

Дополнительные ресурсы

  • 1
    Сайт TOIC
    Сайт проекта TOIC Platform, где можно подчерпнуть основные сведения по работе с платформой TOIC. Перейти.
  • 2
    TOIC book
    Книга-справочник по языку TOIC. Перейти.
  • 3
    Ничего не получается?
    Техподдержка всегда вам поможет!