Jump to content
iT4iT.CLUB

All Activity

This stream auto-updates     

  1. Last week
  2. Earlier
  3. Вопросом на вопрос? Не очевидны? Я тебе типы данных привел, а дальше намекнул. Головой подумать не судьба? И даже на про мини это бы не могло работать, ибо компилятор не дурак чтобы тебе беззнаковую переменную скомпилировать как знаковую. Ну и исполняемый код тоже бы ни как не смог поместить число отрицательное в беззнаковую переменную. По минимуму просто было бы смещение.
  4. эти указания не очевидны. не надо отвечать вопросом на вопрос. и еще раз озвучу, что на Про Мини скетч работал и из беззнаковых получались знаковые без проблем.
  5. Добрый день! Магнитометр QRM3100 корректно работает на ESP8266 c данным скетчем: #include <Wire.h> float xхх, yyy, zzz; void setup() { Serial.begin(9600); Wire.begin(); writeRegister(0b0000001,0b01110001); } void loop() { delay(500); while ((readRegister(0x34) & 0x80) != 0x80) {} int8_t mx2 = readRegister(0x24); uint8_t mx1 = readRegister(0x25); uint8_t mx0 = readRegister(0x26); int8_t my2 = readRegister(0x27); uint8_t my1 = readRegister(0x28); uint8_t my0 = readRegister(0x29); int8_t mz2 = readRegister(0x2A); uint8_t mz1 = readRegister(0x2B); uint8_t mz0 = readRegister(0x2C); xxx = ((int32_t)(mx2 * 256 * 256) | (mx1 * 256) | mx0); yyy = ((int32_t)(my2 * 256 * 256) | (my1 * 256) | my0); zzz = ((int32_t)(mz2 * 256 * 256) | (mz1 * 256) | mz0); Serial.print("M: X\t"); Serial.print(xxx); Serial.print("\t Y\t"); Serial.print(yyy); Serial.print("\t Z\t"); Serial.print(zzz); Serial.println(""); delay(500); } uint8_t readRegister(uint8_t address){ // функция чтения регистра uint8_t output; Wire.beginTransmission(0x23); Wire.write(address); Wire.endTransmission(); delayMicroseconds(2); Wire.requestFrom(0x23, 1); while(Wire.available()) { output = Wire.read(); } return output; } void writeRegister(uint8_t address, uint8_t value){ // функция записи в регистр Wire.beginTransmission(0x23); Wire.write(address); Wire.write(value); Wire.endTransmission(); } но никак не получается на его основе в метеостанции создать новые сенсоры, не видит нкакие данные от QRM3100. Может что-то конфликтует? вставляю в user_sensor след. образом: #ifndef USERS_H #define USERS_H float MAG[3]; ... knob_t *MAG_X = new knob_t(-10000, 10000, ".01", "mag_X", "nG"); knob_t *MAG_Y = new knob_t(-10000, 10000, ".01", "mag_Y", "nG"); knob_t *MAG_Z = new knob_t(-10000, 10000, ".01", "mag_Z", "nG"); ... uint8_t readRegister(uint8_t address){ // функция чтения регистра uint8_t output; Wire.beginTransmission(0x23); Wire.write(address); Wire.endTransmission(); delayMicroseconds(2); Wire.requestFrom(0x23, 1); while(Wire.available()) { output = Wire.read(); } return output; } void writeRegister(uint8_t address, uint8_t value){ // функция записи в регистр Wire.beginTransmission(0x23); Wire.write(address); Wire.write(value); Wire.endTransmission(); } void getMAG() { while ((readRegister(0x34) & 0x80) != 0x80) {} writeRegister(0b0000001,0b01110001); int8_t mx2 = readRegister(0x24); uint8_t mx1 = readRegister(0x25); uint8_t mx0 = readRegister(0x26); int8_t my2 = readRegister(0x27); uint8_t my1 = readRegister(0x28); uint8_t my0 = readRegister(0x29); int8_t mz2 = readRegister(0x2A); uint8_t mz1 = readRegister(0x2B); uint8_t mz0 = readRegister(0x2C); MAG[0] = ((int32_t)(mx2 * 256 * 256) | (mx1 * 256) | mx0); MAG[1] = ((int32_t)(my2 * 256 * 256) | (my1 * 256) | my0); MAG[2] = ((int32_t)(mz2 * 256 * 256) | (mz1 * 256) | mz0); } ... float getmag_x() { return MAG[0]; } float getmag_y() { return MAG[1]; } float getmag_z() { return MAG[2]; } ... void sensors_config() { cron.add(cron::time_10s, getMAG, true); ... sensors.add(MAG_X, device::out, "mag_x", getmag_x, true); sensors.add(MAG_Y, device::out, "mag_y", getmag_y, true); sensors.add(MAG_Z, device::out, "mag_z", getmag_z, true); ... } #endif Диаграммы создаются, но значения совсем не похожи на данные и не меняются. Подскажите, пожалуйста. **************************** почему-то заработало - полтергейст какой-то
  6. проблема с работоспособностью этого скетча на ЕСП8266 решена: int8_t mx2 = readRegister(0x24); uint8_t mx1 = readRegister(0x25); uint8_t mx0 = readRegister(0x26); int8_t my2 = readRegister(0x27); uint8_t my1 = readRegister(0x28); uint8_t my0 = readRegister(0x29); int8_t mz2 = readRegister(0x2A); uint8_t mz1 = readRegister(0x2B); uint8_t mz0 = readRegister(0x2C); так корректно отображаются отрицательные значения. (помогли братья с форума esp8266)
  7. А при чем тут разрядность? uint8_t output; https://ru.wikipedia.org/wiki/Stdint.h Типы с точной шириной. Не все системы могут поддерживать все эти типы. Тип Описание int8_t 8-битовый со знаком int16_t 16-битовый со знаком int32_t 32-битовый со знаком int64_t 64-битовый со знаком uint8_t 8-битовый без знака uint16_t 16-битовый без знака uint32_t 32-битовый без знака uint64_t 64-битовый без знака Как ты получишь знаковое число в без знаковую переменную?
  8. Добрый день! Хочу прикрутить к метеостанции магнитометр QRM3100 для отслеживания изменения магнитного поля. #include <Wire.h> float x, y, z; byte QRM3100_I2C_ADDRESS =0x23; void setup() { Serial.begin(9600); Wire.begin(); writeRegister(0b0000001,0b01110001); } void loop() { delay(500); while ((readRegister(0x34) & 0x80) != 0x80) {} uint8_t mx2 = readRegister(0x24); uint8_t mx1 = readRegister(0x25); uint8_t mx0 = readRegister(0x26); uint8_t my2 = readRegister(0x27); uint8_t my1 = readRegister(0x28); uint8_t my0 = readRegister(0x29); uint8_t mz2 = readRegister(0x2A); uint8_t mz1 = readRegister(0x2B); uint8_t mz0 = readRegister(0x2C); x = ((int32_t)(mx2 * 256 * 256) | (mx1 * 256) | mx0); y = ((int32_t)(my2 * 256 * 256) | (my1 * 256) | my0); z = ((int32_t)(mz2 * 256 * 256) | (mz1 * 256) | mz0); Serial.print("M: X\t"); Serial.print(x); Serial.print("\t Y\t"); Serial.print(y); Serial.print("\t Z\t"); Serial.print(z); Serial.println(""); delay(500); } uint8_t readRegister(uint8_t address){ // функция чтения регистра uint8_t output; Wire.beginTransmission(QRM3100_I2C_ADDRESS); Wire.write(address); Wire.endTransmission(); delayMicroseconds(2); Wire.requestFrom(QRM3100_I2C_ADDRESS, 1); while(Wire.available()) { output = Wire.read(); } return output; } void writeRegister(uint8_t address, uint8_t value){ // функция записи в регистр Wire.beginTransmission(QRM3100_I2C_ADDRESS); Wire.write(address); Wire.write(value); Wire.endTransmission(); } Скетч работает на ProMini, но не хочет на ESP8266. Насколько я понимаю, проблема в разрядности процессоров. ESP не хочет делать отрицательные "int". Пробовал методом "научного тыка" менять типы переменных, ничего хорошего не получается. Ардуино выдает: X 475.00 Y -1268.00 Z 3557.00 ESP выдает: X 593.00 Y 16775842.00 Z 3409.00 т.е. положительные значения похожи, а с отрицательными беда. Работающей библиотеки для датчика QRM3100 не нашел, нарыл только такой код простой записи и чтения регистров датчика. Поскажите, пожалуйста, как его подружить с ESp8266.
  9. Доброе время суток. Если я правильно Вас понял, от контроллера к каждому из датчиков идет отдельная линия I2C. То есть датчики подключены параллельно с последовательным питанием. Если это так, то как мне кажется, это не лучший вариант подключения. Рассмотрите последовательное подключение датчиков, и на каждый контакт выделите по одной паре из кабеля.
  10. Сейчас в том магазине корпус уже не доступен, но вот ссылка на другой магазин https://s.click.aliexpress.com/e/8r5Ivlcob Как я понял, это запчасть от какой-то метеостанции. Если покопать ещё алиэксперсс, то можно и стойку найти и датчик температуры и влажности под этот корпус. Будет комплект. Только датчик беспроводной на 433 МГц на батарейках. Было бы неплохо придумать приёмник этого сигнала, что бы не иметь головной боли с протаскиванием проводов и т.п. Вопрос перегрева можно попробовать решить оклейкой самих рёбер фольгированным скотчем. Только сами ребра, что бы оставить вентиляцию. Должно помочь. Стойку металлическую покупал в строительном магазине, была она 50 на 50, одну ногу укоротил. Крепил корпус под верхнее ребро к стойке на маленькие кабельные стяжки, решение так себе, но в спешке выбора не было
  11. обертывание в фольгу такого экрана для датчика как у den48rus только усугубит проблему с перегревом датчика, т.к. уменьшит воздухообмен. Плюс к этому расположение датчика на стене, освещенной солнцем очень плохое решение, даже если повесить на стену настоящую будку Стивенсона - стена сильно нагревается и передает тепло в окружающее простанство.
  12. Привет дай пожалуйста ссылку, где брал корпус для датчика, уголок на 50 см? Имеется проблема перегрева датчика, сторона размещения восточная. Кто сталкивался с данной проблемой, решит ли обертывание в фольгу?
  13. Всем добрый день. Хочу поделиться неудачным опытом установки в отпуске в России. Станция работала у меня месяц на столе и вот пришло время занять свое законное место на улице. Так как расстояние от датчиков до ESP было около 2х метров, решил использовать витую пару категории 5е. С общим экраном. 2 на питание, остальные SDA и SCL на 3 датчика. Провода паять не было возможно, использовал скрутку с термоусадкой... Знаю, не есть хорошо это. Датчики проработали день или два потом перестали давать данные. Подозрения в скрутке или длине витой пары. Из-за отсутствия времени, не успел ничего поправить, оставил станцию не работающую до следующего года... Жаль.
  14. Спасибо большое за объяснение. Всё заработало. Точка росы появилась. Я немного опишу, как я это сделал. Вдруг есть на форуме люди, которые тоже как и я "на вы" с программированием. Сначала саму формула расчета точки росы вставил ниже формулы расчета абсолютной влажности во вкладке tools.h примечание: компилятор ругался на какие-то ошибки в строке 183. Быстро погуглив, нашел решение. Там где необходимы пробелы расставил именно пробелы, там где tab, именно tab. Говорят, что при копировании части кода из форума, эти вещи могут некорректно вставиться или по простому "не надо тащить всякий хлам в код" цитата... После добавил визуализацию во вкладку users_auto.h. Вставил следующую часть кода. И там же добавил сенсор. Вот собственно и всё. После давил отправку показаний на народный мониторинг и thingspeak. Всё это делал во вкладке services.h Там всё интуитивно понятно. Даже я разобрался сразу. Только для thingspeak максимальное количество датчиков 8, для народного мониторинга можно больше. Но чаще можно отправлять данные в thingspeak и там можно добавлять красивую стрелочную анимацию показаний и делать расчеты и анализ в matlab, соответственно зная или немного разбираясь в языке программирования matlab. Еще пара слов про датчик CO2. Работает он не очень корректно. Данные часто убегают в космос. Не думаю что в моей местности часто имеют место какие-то резкие выбросы CO2 и воздух настолько загрязнен. Думаю дело в калибрации датчика по температуре. Посмотрим как поведет себя датчик в холода, когда займет свое место на улице. К сенсору освещенности вопросов нет. Спасибо за помощь. Всем удачи!
  15. Доброе время суток @den48rus Идеологически все файлы имена которых начинаются с префикса users_ считаются примерами. По факту Вы можете использовать только один из таких файлов в данном проекте. Каждый из файлов описывает ту или иную ситуацию использования микроконтроллера со своими датчиками и различными расчетами. После того, как определитесь какой пример Вам больше подходит, то в коде основного файла оставляете только этот файл подключенным через оператор #include, а все остальные users_ файлы необходимо закомментировать. Тут все еще проще. Формула, в нашем случае, это просто функция, а следовательно она должна быть в области видимости того блока который её вызывает. Самый простой вариант, это разместить ее в том же файле где ее вызывают. Иногда бывает необходимость доступа к функции или объекту из нескольких точек в проекте, тогда можете разместить свой код, например, в tools.h Вот пример размещение функции расчета абсолютной влажности которая потом используется в пользовательских сенсорах и не только. Да, Вы уже имеете доступ к журналу за последние сутки, можете производить расчеты и делать выводы. А вот как это отображать, стоит подумать... По умолчанию предполагалось, что все сенсоры предоставляют данные в числовом виде, от этого и соответствующий вид сенсоров. В таком случае Вы должны или придумать числовое представление: 0 - стабильно, -99 - к дождю, а 99 в засухе. Или придумать свой виджет. Вы даже можете сделать отдельную страничку для этого, в общем есть над чем подумать. PS: прошу прощение за долгие ответы, не всегда имею возможность отписаться.
  16. Всем добрый день. Продолжаю мучать метеостанцию... Никак не могу добавить расчет точки росы. Добавлять формулу расчета и другие параметры надо во вкладку users_auto.h ?? Далее. Но куда вставить формулу?? Я далек от программирования... Не могли бы вы пошагово объяснить?
  17. https://youtu.be/18yeKmep-P8 Отличная идея для метеостанции) как вам?! Можно ли реализовать это на веб странице?! Или как доп модуль.
  18. Здравствуйте, можно ли с этого места по подробней. Никак не могу организовать добавление записей в базу данных на сервер в интернете. Все получается в локальной сети, а вот на хостинге не получается. Все сайты, подобные "народному мониторингу ", используют специальный ключ, что бы принимать данные с определенной платы ардуино. Как это можно реализовать на своем сайте в интернете?
  19. @makkirus рад, что Вы получили данные, но в предоставленном логе присутствуют ошибки. Это как минимум разрыв соединения с MySQL сервером и отсутствие прав на запись логов. Но это уже не связано с демоном.
  20. Доброе время суток. У меня на практике получилось использовать экранированный медный ethernet кабель UTP 5E, общей длинной около 7 метров. Это были два отрезка для подключения двух датчиков BME280, один в помещении, другой на улице. Использовал по одной паре на каждый из контактов датчика - SDA, SCL, VCC и GND. Можно сажать датчики друг за другом, не обязательно тянуть до каждого свой кабель, в моем случае это была необходимость для выноса одного датчика на улицу. Главное ограничение, это общая емкость линии, если память не подводит, то она не должна превышать 400pF. Также стоит помнить, что на всех Китайских I2C модулях распаяны подтягивающие резисторы, соответственно их количество растет пропорционально количеству модулей, а это не очень хорошо, хотя вполне работоспособно. Но имейте в виду, что это может сказаться на работоспособности и тогда будет необходимо убрать все подтяжки на модулях и поставить два резистора на стороне микроконтроллера. Идея интересная, нужно экспериментировать особенно с ультрафиолетом и тем пройдет ли он через пластиковую линзу, если пройдет то какой - А или В... По умолчанию датчик CCS811 уже измеряет VOC. Обратите внимание на метод читающий показания с датчика. ccs811.read(&eco2, &etvoc, &errstat, &raw); В примере мы возвращали значение eco2, просто начните возвращать etvoc, и не забудьте поменять описание для сенсора в web. Я полагаю, что Вы используете эту библиотеку https://github.com/adafruit/DHT-sensor-library, попробуйте сделать следующие действия. Подключите библиотеку, освободите (программно тоже) один из портов микроконтроллера для подключения датчика, объявите датчик DHT22 и описание для web. #include "DHT.h" DHT dht(10, DHT22); // Замените 10-ый порт на свободный knob_t *T = new knob_t(-40, 125, ".1", "Температура", "°C"); knob_t *H = new knob_t( 0, 100, ".01", "Влажность", "%"); Далее в блоке с описанием сенсоров, например в функции sensors_config произведем инициализацию датчика и объявим сенсор температуры и влажности. dht.begin(); sensors.add(T, "out_temperature", [&](){ return dht.readTemperature(); }); sensors.add(H, "out_humidity", [&](){ return dht.readHumidity(); }); В теории должно заработать. Проект слишком дырявый чтобы выкидывать его как что-то серьезное на github.
  21. Вы правы, не было в системе модуля. Теперь все ок. Данные в базе есть. Для отладки запустил с параметром window и вот что на экране в консоли. Результат такой: sudo -u mqtt-agent /media/mqttMySqlClient.py window 2019-07-23 00:57:03 connecting to MQTT broker... 2019-07-23 00:57:03 mysql connected 2019-07-23 00:57:03 mqtt connected client id: mqttMySqlClient 2019-07-23 00:57:03 mqtt subscribe on "#" 2019-07-23 00:57:03 mqtt subscribe on "$SYS/#" 2019-07-23 00:57:03 mysql disconnect 2019-07-23 00:57:03 connecting to MQTT broker... 2019-07-23 00:57:03 mqtt connected client id: mqttMySqlClient 2019-07-23 00:57:03 mqtt subscribe on "#" 2019-07-23 00:57:03 mqtt subscribe on "$SYS/#" 2019-07-23 00:57:03 mysql [2006] 2019-07-23 00:57:03 mysql [2006] 2019-07-23 00:57:03 mysql [2006] 2019-07-23 00:57:03 mysql [2006] 2019-07-23 00:57:03 mysql ping fail [2006] 2019-07-23 00:57:03 unexpected termination of the program Traceback (most recent call last): File "/media/mqttMySqlClient.py", line 305, in <module> start() File "/media/mqttMySqlClient.py", line 188, in start alert('\nunexpected termination of the program', True) File "/media/mqttMySqlClient.py", line 46, in alert with open(mysql_log_file, 'a+') as log: IOError: [Errno 13] Permission denied: '/var/log/mqttMySqlClient.log' esp-master@mqtt:~$
  22. Доброе время суток @makkirus Ошибка явно указывает на то, что интерпретатор не знает ничего о библиотеки paho-mqtt, возможно ее попросту нет. Внимательно проверьте, все ли пункты инструкции Вы выполнили. Например под Linux Ubuntu посмотреть установлена библиотека или нет можно следующей командой. pip list | grep paho-mqtt В ответе Вы должны получить что-то подобное paho-mqtt (1.4.0) А для отладки запускайте демона с параметром window mqttMySqlClient.py window Если Вы все правильно сделали, то результат должен быть примерно таким
  23. Отличная статья! Огромное спасибо! Помогите решить проблему У меня при старте демона возникает проблема: Traceback (most recent call last): File "/media/mqttMySqlClient.py", line 9, in <module> import paho.mqtt.client as mqtt # https://pypi.python.org/pypi/paho-mqtt ImportError: No module named paho.mqtt.client Пожалуйста, подскажите как её решить?
  24. скетч ардуины, принимающей данные с орегонов INT_oregon-arduino_wind_rain_1_3_4_temp_slave1_7-7-19.zip
  25. Добрый день! У меня все внешние датчики подключаются к ESP через ардуины про мини, подключенные по шине i2c как slave. Данные от датчиков Орегон считываются одной из таких ардуин с приемником на 433МГц. Принимаю данные от 1-го датчика ветра WGR800, 1-го датчика осадков PCR800 и трёх термогигрометров THGR810. Данные всех пяти датчиков принимаются со статусом питания, если его не читать, можно еще добавить два термогигрометр. Полный скетч в приложении. Там еще добавлен экран nextion. Его можно не подключать, без него работает нормально. скетч до конца не отработан. Проверен вебсервер ESP и народный мониторинг. MQTT знаю, что работает, но на всех датчиках еще не проверил. INT_Meteo_D_4slaves_nextion4x16_mqtt_10-7-19.zip
  1. Load more activity
×
×
  • Create New...