1. В сообществе нашего форума Вконтакте создан раздел по продаже электронных компонентов.
    Каждый может продать в нем свои залежавшиеся детали. Подробности здесь.

Go Программирование на GO для embedded

Тема в разделе "Программирование", создана пользователем radioengineer, 26 апр 2016.

  1. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.488
    Симпатии:
    345
    Адрес:
    Алматы
    Буду здесь складывать интересные ссылки и приемы для embedded, которые будут попадаться по мере изучения golang. Предлагаю всем делиться информацией.
     
  2. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.488
    Симпатии:
    345
    Адрес:
    Алматы
    Установка go с помощью gvm (go version manager) ссылка - наименее геморройный способ установить последнюю версию go скажем на raspberry pi.
    --- Сообщения объединены, 26 апр 2016 ---
    Множественное определение констант для битовых операций
    PHP:
    const{
    BitFirst << iota // 1
    BitSecond            // 2
    BitThird             // 4
    BitForth             // 8
    // и так далее
    }
    Последнее редактирование: 26 апр 2016
  3. hes

    hes Гость

    Сообщения:
    17
    Симпатии:
    3
    по структуре
    обычно делается каталог приложения <appname>
    в нём уже создаются ручками папки
    bin
    pkg
    src
    тут же 1-2 баш скрипта, в которых прописываются команды например:
    //тут прописываются переменные окружения, GOPATH обязателен для компилятора
    go get github.com/jasonlvhit/gocron

    пакеты качаются в папку src/github.com

    в папке src вообще можно файлы проекта положить либо в папку github.com либо в какую свою типа domain.kz
    мне понравилось софт заворачивать в супервизор fresh
    в скриптах также GOPATH , переход в главную папку проекта и старт команды fresh - он при изменении исходников видит это, перекомпилирует проект и рестартует, при этом старый процесс обязан отработать до конца, если существуют для него задачи.
    очень удобно
    radioengineer нравится это.
  4. hes

    hes Гость

    Сообщения:
    17
    Симпатии:
    3
    PHP:
    func (*BlasterStart(start []int64) {
      
    fmt.Println("Старт устройства pi-blaster")
      const 
    fifo "/dev/pi-blaster" //пишем прям в дрова
      
    copy(startb.active)
      
    b.active start
      b
    .Pins make([]float6426)

      
    ferr := os.Create(fifo)
      
    check(err)
      
    defer f.Close()

      for 
    := range b.active {
        
    fmt.Printf("Set pin %d to 0\n"b.active)
        
    f.WriteString(strconv.FormatInt(b.active10) + "=0\n")
        
    b.Pins[b.active-1] = 0.0
        f
    .Sync()
      }

      
    f.Close()
    }

    func (*BlasterApply(pin int64value float64) {
      
    ferr := os.Create("/dev/pi-blaster")
      
    check(err)
      
    defer f.Close()
      if 
    value 1.0 {
        
    value 1.0
      
    } else if value 0.0 {
        
    value 0.0
      
    }

      var 
    toVal string
      toVal 
    strconv.FormatFloat(value'f'264)
      
    n1err := f.WriteString(strconv.FormatInt(pin10) + "=" toVal "\n")
      
    b.Pins[pin-1] = value
      n1 
    n1
      f
    .Sync()
    }

    func semaphore(piblaster blaster.Blasterport int64) {
            for {
                    
    strength := 0.0
                    
    for strength {
                        
    strength += 0.1
                        piblaster
    .Apply(portstrength)
                        
    time.Sleep(200 time.Millisecond)
                    }
                    
    time.Sleep(200 time.Millisecond)
                    for 
    strength {
                        
    strength -= 0.1
                        piblaster
    .Apply(portstrength)
                        
    time.Sleep(200 time.Millisecond)
                    }
                    
    time.Sleep(200 time.Millisecond)
            }
    }
    1. это пример простого управления шим, причем уровень сигнала может изменятся либо по расписанию, либо по событию извне. код писать можно коряво, можно некоряво, компилятор стреляет на этапе компиляции наиболее уродский код, но это обычно из-за забывчивости.
    2. использовать cron как системный, так и внутрипрограммный.
    3. программный клиент-сервер, который либо ходит по http-get на нужное железо, либо принимает по http-get сигналы от железа (это Алекс подсказал), оказывается такое бывает)), следовательно, нужен быстрый http сервер. сервер работает в отдельном легковесном процессе, не затрагивая процессов ОС и асинхронно работает с веб запросами, практически же, можно в чат этого сайта писать сообщения от бота на малинке, websocket и достаточно. http клиент работает по внутреннему cron-у программы, так же в своем легковесном процессе - горутине, это почти зеленый поток, то есть обработка информации работает максимально быстро.
    4. управление электросетью контролируемых устройств, весь контроль за использованием электроэнергии по расписанию или событию (учет энергии ведется либо общий, либо с ограничениями по помещению и группой потребителей). если освещение - например контроль уровня освещения, в зависимости от данных метеостанции (ардуино, 3-4 датчика: температура+влажность, освещенность за окном например и внутри помещения (вот тут лучше почитать о нормативах освещенности в рабочих помещениях по ГОСТ, какой конкретно не могу сказать, надо искать) и событий внутри освещаемого помещения, есть человек - есть освещение, согласно данных датчиков, если отопление загородного дома - температурный контроль и поддержания режимов согласно данных датчиков.
    5. туда же можно отдельным процессом впилить бота телеграм, который читая исторические краткоживущие данные по произведенным командам или сработанным событиям (хранение 1 месяц или больше, зависит от смонтированных дисков, usb проще всего, либо флешка на терабайт, на mongodb, mysql (кому надо с реляциями, кому надо map-reduce), прямо в json-формате, с информацией о:
    расписании события (если существует)
    произошедшем событии (код события, типа "планировщик задач: снятие данных с устройства N исполнено", "событие: датчик недоступен" и тд)
    устройстве события (код устройства)
    событии устройства (устройство само скажет какое)
    предпринятом действии (код процесса, который анализирует этот датчик)
    статус события
    метка времени), делает статистические отчеты за час, полдня, день, сутки, неделя, месяц, год, выгружает их любому подписчику,
    а также по команде либо отдаёт состояния групп датчиков или контролируемых параметров системы, либо управляет контрольными группами устройств.
    6. емайлы с статистикой по группам устройств по расписанию внутреннего cron программы, с разнородной информацией - по разным спискам рассыли. postfix отлично работает также одновременно.

    Это все работает одновременно на распберри, достаточно быстро.

    --- Сообщения объединены, 27 апр 2016 ---
    https://github.com/sarfata/pi-blaster драйвер на си
    Последнее редактирование модератором: 27 апр 2016

Поделиться этой страницей