Вт дек 12, 2017 20:59:35
pi@raspberrypi:~ $ cd /sys/devices/w1_bus_master1/28-21ee67000900
pi@raspberrypi:/sys/devices/w1_bus_master1/28-21ee67000900 $ ls
driver id name power subsystem uevent w1_slave
pi@raspberrypi:/sys/devices/w1_bus_master1/28-21ee67000900 $ cat w1_slave
ff 07 ef eb 7f ff 03 10 e1 : crc=e1 YES
ff 07 ef eb 7f ff 03 10 e1 t=127937
pi@raspberrypi:/sys/devices/w1_bus_master1/28-21ee67000900 $
Вт дек 12, 2017 21:20:47
Вт дек 12, 2017 21:22:39
Ну "Малинка" жу не умеет сама по себе датчики обслуживать. Ей нужен код. Покажите его.viktor6 писал(а):Честно я не понимаю о чем вы говорите.
Вт дек 12, 2017 22:25:16
Ну "Малинка" жу не умеет сама по себе датчики обслуживать. Ей нужен код. Покажите его.viktor6 писал(а):Честно я не понимаю о чем вы говорите.
pi@raspberrypi:~/myproject $ cat temperature.py
import os
import glob
import time
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print(read_temp())
time.sleep(1)
pi@raspberrypi:~/myproject $
Ср дек 13, 2017 08:17:33
Ср дек 13, 2017 10:43:24
Ср дек 13, 2017 14:10:03
Честно я не понимаю о чем вы говорите. Датчики просто присоединены кабелем UTP к raspberry pi3.
Ср дек 13, 2017 14:22:39
Любое число можно представить во множестве счислений - хот в двоичном, хоть в десятичном, ... Но значение этого числа от этого будет неизменным.ROMan2947 писал(а):Я считал данные в двоичном коде, мне этот код нужно преобразовать в
Ср дек 13, 2017 15:15:17
Данные он выдаёт уже в удобоваримом формате.
Ср дек 13, 2017 15:16:18
Разве? Для получения температуры с разрешением 1ºC, нужно код разделить на 16, т.к. 0,0625*16=1Аlex писал(а):Данные он выдаёт уже в удобоваримом формате. Их просто нужно занести в знаковую переменную один к одному - сразу получаем температуру.
Ср дек 13, 2017 15:19:44
Этот процесс можно на примере показать?Их просто нужно занести в знаковую переменную один к одному - сразу получаем температуру.
16 это к чему относится? 16 битный код?нужно код разделить на 16.
Ср дек 13, 2017 15:27:51
Разве.akl писал(а):Разве? Для получения температуры с разрешением 1ºC, нужно код разделить на 16сразу получаем температуру.
Процесс чего ?ROMan2947 писал(а):Этот процесс можно на примере показать?
К разрешению датчика.ROMan2947 писал(а):16 это к чему относится?
Ср дек 13, 2017 15:29:36
Ср дек 13, 2017 15:38:12
К разрешению датчика.
ну пришлось поюзать,но до истины добраться уж только здесь)А спрашиваете как переводить эти данные в пользовательский вид 
Ср дек 13, 2017 15:46:26
Да. При 12-ти битах, 4 бита остаются в дробной части от целых. А 4 бита - это 16.ROMan2947 писал(а):полагаю 16 это 12 битная разрешающая способность?
Ср дек 13, 2017 18:16:41
Ср дек 13, 2017 18:25:30
Ср дек 13, 2017 18:38:10
uint8_t scratchpad[9]; // сюда считываются данные из датчика
int16_t *temp = (void*)scratchpad; // по указателю будет температура
// считали данные, проверили CRC. если все ОК, берем *temp и делим на 16 или иной коэффициент в зависимости
// от типа датчика - имеем готовую температуру со знаком.
float temperature = *temp / 16.0;
Ср дек 13, 2017 20:17:45
На мое огромное удивление температура отображается исправно,причем и при отрицательной температуре Но все же есть одно,НО... очень хочется на своей LCD видеть не только целые,но и десятые доли)уже не один раз писал, как определить температуру по данным...
Ср дек 13, 2017 20:22:39
uint8_t scratchpad[9]; // сюда считываются данные из датчика
int16_t temp = *(int16_t*)scratchpad; // читаем температуру в temp
// считали данные, проверили CRC. если все ОК, берем *temp и делим на 16 или иной коэффициент в зависимости
// от типа датчика - имеем готовую температуру со знаком.
temp *=10;
temp /=16;
printf("%d.%d", temp/10, temp%10);