Не умный дом

Тема в разделе "Посоветуйте детальки", создана пользователем Serg-Fir, 15 ноя 2018.

  1. ИгорьК

    ИгорьК Гуру

    Есп - датчик, пойдет провод что вы показали.
    Питание к устройству - чем толще тем лучше.
     
  2. Serg-Fir

    Serg-Fir Нуб

    От батарейки до контроллера - питание!

    Остальные мои фразы не читали?


    Спасибо!
     
  3. Serg-Fir

    Serg-Fir Нуб

    Спасибо, но проводами не интересно. Как датчик приедет, я его конечно проводами испытаю, но все-таки по воздуху интереснее.

    Если Вы знаете, что есть "что-то менее прожорливое", но при этом и такое же приемлемо-точное как BME280, не стоит в 10 раз дороже, может подскажите где купить?
     
  4. parovoZZ

    parovoZZ Гуру

    nRF24 без проводов к МК пока не прикрутить никак. Да и любой трансивер пока только проводами подключается к МК.
     
  5. parovoZZ

    parovoZZ Гуру

    nRF24 по проводам? Это как? Коаксиальным фидером их будешь соединять? Интересный ход. Будешь пионером!
     
  6. parovoZZ

    parovoZZ Гуру

    я сам в поисках. Пришел к выводу, что аналоговые датчики это мастхэв. Замер у МК длится 15 мкс, плюс какое-то время надо подождать на переходной процесс. Но это все равно выгоднее, чем датчик с цифровым интерфейсом.
     
  7. parovoZZ

    parovoZZ Гуру

    у тебя от камаза батарейка? Зачем провода?
     
  8. parovoZZ

    parovoZZ Гуру

    нет никакого общего принципа. Гигабит сейчас передаётся по витухе сечением 0.22 мм2.
     
    Serg-Fir нравится это.
  9. Serg-Fir

    Serg-Fir Нуб

    "Без проводов никак", "с проводами это как?" :)

    Где-то не правильно высказались.

    Малина + nrf24 -> воздух <- nrf24 + bme280 - у вас так? я примерно так и думал делать, но только два датчика температуры.

    аккум в доме, питание по проводу на улицу, где темп.датчик + вифи/радио модуль
     
  10. parovoZZ

    parovoZZ Гуру

    я могу неправильно высказаться, но не написать, ибо обязательно перечитываю сообщение перед отправкой.
    зачем? У меня 123 батарейка прекрасно перенесла морозы в прошлую зиму.
    у меня 328 камень с DS18B20 и nrf24 от 123 батарейки живет на балконе. Это очень неудачное решение и вскоре отпишусь почему. Рядом с роутером живет малинка также с nRF24. Если интересно, то код с малинки могу выложить. Хорошее подспорье для старта, ибо сам когда начинал собирал по крупицам. В сети один ШЛАК.
     
    Serg-Fir нравится это.
  11. Serg-Fir

    Serg-Fir Нуб

    328 камень это Атмега? Сначала не понял что за 328, и гугль первой ссылкой выдал https://devicter.ru/goods/Sensor-Node-V3?from=MmY5 - тут вообще "имеет питание от солнечной панели и в место батарейки используется ионистр" , но дороговато.

    Идею понял, спасибо за конкретику, поизучаю DS18B20 - не натыкался я на него до этого момента.
    Код интересно посмотреть, пришлите пожалуйста.
     
  12. Serg-Fir

    Serg-Fir Нуб

    Это датчик температуры. А мне влажность тоже нужна. Но тоже интересен, спасибо.
     
  13. ИгорьК

    ИгорьК Гуру

    Ну, согласитесь, я не так масштабен :)


    За этой невероятной историей следит весь форум :) Реально.

    Даже фото видели. Код - нет.
    С начала рассказов об этом необыкновенном устройстве его уже раза три можно было написать, даже на ассемблере. :)

    Это только датчик температуры. Начинающим, обычно нужны (жизненно необходимы!) влажность и давление.
    Если температуры все таки достаточно - выкиньте его за окно одного на трех проводах. Там шина 1Wire, а она длиииииинная... Хоть всю квартиру обмотай.
     
    SergeiL и Airbus нравится это.
  14. parovoZZ

    parovoZZ Гуру

    я присматривался к этой шняге. Но это шняга. Я свою сделаю. Лучше в разы.
    Мде? Не знал. Но для батарейки он не канает - много жрет.
    будет ещё лучше!
     
  15. ИгорьК

    ИгорьК Гуру

    Кто бы сомневался :) Но пока...

     
    DetSimen нравится это.
  16. Serg-Fir

    Serg-Fir Нуб

    parovoZZ я Вас вообще перестал понимать. Сначала вы говорите что DS18B20 у Вас имеется и работает на балконе от батарейки, после чего я изучаю и говорю что это датчик температуры, а Вы в ответ, что не знали этого и для батарейки он не канает - жрет много.



    Пусть так, но мне нужна влажность. Нужна правда внутри квартиры, но для некоторой статистики пусть будет и на улице.
     
  17. Airbus

    Airbus Радиохулиган Модератор

    Следим.И даже не вмешиваемся.Ещё один УМНЫЙ ДОМ?
     
  18. parovoZZ

    parovoZZ Гуру

    Вот код для малинки

    Код (C++):
    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <time.h>
    #include <RF24/RF24.h>

    #define nRF_SEND_LEN 11
    #define interruptPin RPI_V2_GPIO_P1_29
    using namespace std;

    typedef struct
      {
        uint8_t        id;                // 1 byte
        uint16_t    temperature;    // 2 byte
        uint16_t    pressure;       // 2 byte
        uint8_t        humidity;        // 1 byte
        uint8_t        rain;           // 1 byte
        uint8_t        solar;          // 1 byte
        uint8_t        wind;            // 1 byte
        uint8_t        direction_w;    // 1 byte
        uint8_t        _error;         // 1 byte
      } payload;                    // 11 byte

    // gpio pins, spi speed
    RF24 radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ);
    void getWeather(uint8_t Buf[nRF_SEND_LEN])
    {
        float temperature;
      //  bool    listen = 1;
        payload receivePayload;
        const time_t curTime = time(NULL);

        receivePayload.id = Buf[0];
        receivePayload.temperature = (uint16_t)Buf[2];
        receivePayload.temperature = ((receivePayload.temperature << 8) & 0xff00) | (uint16_t)Buf[1];
        receivePayload.pressure = (uint16_t)Buf[4];
        receivePayload.pressure = ((receivePayload.pressure << 8) & 0xff00) | (uint16_t)Buf[3];
        receivePayload.humidity = Buf[5];
        receivePayload.rain = Buf[6];
        receivePayload.solar = Buf[7];
        receivePayload.wind = Buf[8];
        receivePayload.direction_w = Buf[9];
        receivePayload._error = Buf[10];
       
        if (receivePayload.temperature & 0xf800){
            receivePayload.temperature = ~(receivePayload.temperature)+1;
            temperature = 0 -  (float)receivePayload.temperature / 16.0;
            }
        else
            {
            temperature = (float)receivePayload.temperature / 16.0;
            }

        printf("%s", ctime(&curTime));
        printf("0=%x, 1=%x, 2=%x, 3=%x, 4=%x, 5=%x, 6=%x, 7=%x, 8=%x, 9=%x, 10=%x\n", Buf[0], Buf[1], Buf[2], Buf[3], Buf[4], Buf[5], Buf[6], Buf[7], Buf[8], Buf[9], Buf[10]);
        printf("id=%d, temperature=%f, error=%d\n", receivePayload.id, temperature, receivePayload._error);
        printf("\n");

        ofstream out("/home/pi/Weather");

        out << "time" << ctime(&curTime) << "\n";
        out << "ID = " << receivePayload.id*1 << "\n";
        out << "temperature = " << temperature << "\n";
        out << "humidity = " << receivePayload.humidity*1 << "\n";
        out << "pressure = " << receivePayload.pressure << "\n";
        out << "solar = " << receivePayload.solar*1 << "\n";
        out << "wind = " << receivePayload.wind*1 << "\n";
        out << "direction = " << receivePayload.direction_w*1 << "\n";
        out << "rain = " << receivePayload.rain*1 << "\n";
        out << "text = " << receivePayload._error*1 << "\n";

        out.close ();
    }

    void intHandler()
    {
        uint8_t pipe_num=0;
        uint8_t Buf[nRF_SEND_LEN];
        bool tx_ok, tx_fail, rx;

        radio.whatHappened(tx_ok, tx_fail, rx);

        if (radio.available(&pipe_num)){
            memset(Buf, 0, nRF_SEND_LEN);
            radio.read(Buf, nRF_SEND_LEN);


            switch (Buf[0]){

                case 222:
                getWeather(Buf);
                break;
        }
               
        radio.stopListening();
        radio.startListening();

        }
    }

    int main(int argc, char** argv)
    {

      radio.begin();
      radio.setPALevel(RF24_PA_MAX);
      radio.setDataRate(RF24_1MBPS);
      radio.setCRCLength(RF24_CRC_8);
      radio.setRetries(15, 15);
      radio.setAutoAck(1);
      radio.setChannel(125);
      radio.setPayloadSize(nRF_SEND_LEN);
      radio.openWritingPipe(0x1111111111LL);
      radio.openReadingPipe(1,0x1111111110LL);
      radio.openReadingPipe(2,0x1111111111LL);
      radio.openReadingPipe(3,0x1111111112LL);
      radio.openReadingPipe(4,0x1111111113LL);
      radio.openReadingPipe(5,0x1111111114LL);
      //radio.maskIRQ(0, 0, 1);
      radio.startListening();
      radio.printDetails();

      attachInterrupt(interruptPin, INT_EDGE_FALLING, intHandler);

      while (1)
      { delay(100);

      }
         
    }
     
    Был написан за пару вечеров за бутылочкой и впоследствии заброшен. Поэтому комментариев нет. Код рабочий, но не правильный. Для старта пойдет))
    Структура пакета, которую отправляет передатчик, такая
    uint8_t id; // 1 byte
    uint16_t temperature; // 2 byte
    uint16_t pressure; // 2 byte
    uint8_t humidity; // 1 byte
    uint8_t rain; // 1 byte
    uint8_t solar; // 1 byte
    uint8_t wind; // 1 byte
    uint8_t direction_w; // 1 byte
    uint8_t _error; // 1 byte
    Всего 11 байт при 32 максимальных. Посылает только температуру))
     
  19. Atikin

    Atikin Нуб

    Ардуино выдерживает температуру до -50С°. Дальше начинает давать ложные показания. Сам проверял.
     
  20. parovoZZ

    parovoZZ Гуру

    Вот такие батарейки проработали год и два месяца, пока не просели до 2.7в.
    IMG_0440.JPG