PureBasic для Raspberry PI
Не так давно состоялся релиз PureBasic версии 6.00, в котором среди прочего добавлена поддержка ARM процессоров. В списке платформ присутствует Raspberry PI, но вероятно должны поддерживаться и другие похожие одноплатные компьютеры. Мною была проверена работа на большинстве моделей Raspberry PI включая самую простую — Zero и топовую на текущий момент — 4B. На всех была установлена Raspberry Pi OS April 4th 2022. Как и ожидалось, PureBasic запустился и нормально работал на всех тестовых Raspberry PI.
Небольшое пояснение для тех кто не знает что такое PureBasic
PureBasic это компилируемый язык программирования, созданный в начале двухтысячных годов для компьютера Amiga. По мере своего развития, были добавлены другие платформы включая Windows, Linux и Mac OS X для процессоров Intel, AMD, ARM и PowerPC. По моему мнению, это один из лучших современных диалектов бейсика. Не последнюю роль в этом сыграла кроссплатформенная библиотека насчитывающая почти 2 тысячи функций различной направленности. Среди них присутствуют функции работы с растровой, векторной, 2D и 3D графикой. Поддержка баз данных типа MySQL, SQLite, PostgreSQL, ODBCD и других. Работа с файлами, с сетью (FTP, HTTP/HTTPS, Mail), GUI и многое другое. Наличие поддержки многопоточности позволяет в полной мере задействовать все ядра процессора в ресурсоемких вычислениях. Ознакомится с полным списком функций можно в онлайн документации https://www.purebasic.com/documentation/
Благодаря кроссплатформенной библиотеке воможно перенести приложения изначально разработанные для компьютера с Windows или MacOS X на Raspberry Pi.
Язык программирования PureBasic довольно прост и его не сложно изучить. Почти все что нужно можно найти в справке входящей в дистрибутив. Она на английском, но в сети есть переведенная на русский.
PureBasic подойдет тем кому нужно разработать приложение для Raspberry Pi или других платформ, без необходимости изучения особенностей операционной системы и функционирования компьютера. С решением большинства задач прикладного уровня справится кроссплатформенная библиотека без необходимости применения функций ОС.
Для установки PureBasic на Raspberry Pi, его следует скачать с официального сайта https://www.purebasic.com Нужно выбирать версию, соответствующую разрядности операционной системы. То есть для 32-ух битной ОС необходим архив для arm32, а для 64-ех битной ОС — arm64.
Установка выполняется путем извлечения архива в любую папку (например, в домашнюю текущего пользователя) на которую есть права доступа. Дальнейшие действия описаны в файле INSTALL из архива.
Фрагмент из файла INSTALL
Installation
Unpack Purebasic
Create in «Private Folder» an Apps folder
Unpack Purebasic into this folder
Rename folder with versions number. Example «purebasic» → «purebasic-v572»
Install developer packages
Info: Required Webkit not available on Ubuntu bigger version 18.04. Support of Webkit2gtk with Purebasic v6.00 (Ubuntu 20.04/gtk3)
Start Terminal and install packages
Update compiler and default libraries
sudo apt-get install build-essential gcc g++
Developer Libraries
sudo apt-get install libxxf86vm-dev libxine2-dev unixodbc-dev libsdl1.2-dev libsdl2-dev libssl-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev
Ubuntu 18.04
sudo apt-get install libwebkitgtk-dev libwebkitgtk-3.0-devUbuntu 20.04 / Raspberry PI Desktop
sudo apt-get install libwebkit2gtk-4.0-devRaspberry PI Desktop / Movie Library
sudo apt-get install libvlc-dev
Developer Libraries For Games
sudo apt-get install libgl1-mesa-dev libgl1-mesa-glx
Subsystem qt
sudo apt-get install qtbase5-dev qttools5-dev qtmultimedia5-dev qtdeclarative5-dev libqt5svg5-dev libqt5webkit5-dev libqt5multimedia5-plugins
Canberra for PB-IDE (Raspberry PI not need)
sudo apt install libcanberra-gtk-module
Ubuntu missing default libs (Without developer packages)
gtk2:
sudo apt-get install libgtk2.0
gtk3:
qt:
sudo apt install qt5-default
Для компиляции приложений следует установить несколько пакетов разработчика (dev). Их список приведен в файле INSTALL и зависит от типа разрабатываемых приложений. Или можно установить все требуемые пакеты (излишне во многих случаях) выполнив в терминале строку.
sudo apt-get install build-essential gcc g++ libxxf86vm-dev libxine2-dev unixodbc-dev libsdl1.2-dev libsdl2-dev libssl-dev libgtk2.0-dev libgtk-3-dev libwebkit2gtk-4.0-dev libvlc-dev libgl1-mesa-dev libgl1-mesa-glx qtbase5-dev qttools5-dev qtmultimedia5-dev qtdeclarative5-dev libqt5svg5-dev libqt5webkit5-dev libqt5multimedia5-plugins
Весь процесс от скачивания PureBasic, до установки пакетов и запуска тестового приложения можно посмотреть на видео.
В папке examples находятся несколько десятков различных примеров программ. Запуск некоторых из них показан на видео.
Версия PureBasic для Linux предоставляет на выбор три GUI подсистемы — GTK2, GTK3 (по умолчанию) и Qt. Для этого не требуется вносить изменения в код. Достаточно указать подсистему в настройках компилятора.
На Raspberry Pi 4B прекрасно работают примеры 3D приложений, несмотря на то что «малина» не предназначена для 3-ех мерной графики.
Небольшие подергивания картинки из-за записи видео с экрана и его кодирования. Без этого анимация плавная.
Для доступа к железу «малины» сообщество написало ряд библиотек или интерфейсов к существующим. Со списком можно ознакомиться в теме на официальном форуме https://www.purebasic.fr/english/viewtopic.php? t=78338
https://www.purebasic.fr/english/viewtopic.php? t=78440
Рассмотрим один из примеров, считывающий температуру процессора «малины» и отображающий ее в окне.
; Файл из которого нужно считывать температуру.
If ReadFile(0, "/sys/class/thermal/thermal_zone0/temp", #PB_UTF8) = 0
MessageRequester("", "Нет доступа к файлу", #PB_MessageRequester_Error)
End
EndIf
; Создание окна.
OpenWindow(0, 0, 0, 250, 90, "CPU Temp", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(0, 0, 20, 250, 80, "", #PB_Text_Center)
SetGadgetFont(0, LoadFont(0, "FreeSans", 28, #PB_Font_Bold))
; Таймер с периодом 1 секунда.
AddWindowTimer(0, 0, 1000)
PostEvent(#PB_Event_Timer, 0, 0) ; Отправка события таймера чтобы температура появилась сразу, а не через секунду после запуска приложния.
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Timer And EventTimer() = 0 ; Сработал таймер.
FileSeek(0, 0) ; Переход в начало файла.
temp.d = ValD(ReadString(0))/1000 ; Чтение из файла и перевод с тысячных долей градуса в целые.
SetGadgetText(0, StrD(temp, 3)+" °C") ; Отображение в температуры в окне.
EndIf
Until Event = #PB_Event_CloseWindow
CloseFile(0)
В начале программы функция ReadFile () открывает системный файл из которого в дальнейшем будет считываться температура. В случае недоступности файла, появляется соответствующее сообщение и на этом работа программы завершается.
При успешном открытии файла создается окно и текстовое поле в нем методом вызова функций OpenWindow () и TextGadget ().
Функция AddWindowTimer () добавляет таймер в окно с периодом 1000 миллисекунд (секунда), и через эти промежутки времени регулярно будет генерироваться событие.
В цикле, функция WaitWindowEvent () ожидает ближайшего события и возвращает его код. Если это событие таймера, производится чтение температуры из файла и отображение в окне.
В случае события закрытия окна, цикл прервется и работа программы на этом завершится.