Повний варіант мови Wolfram доступний для Raspberry Pi і поставляється в комплекті з операційною системою Raspbian. Програми можна запустити з командного рядка RPi або у фоновому режимі, а також через інтерфейс блокнота на RPi. На RPi мова Wolfram підтримує прямий програмний доступ до стандартних портів RPi і пристроїв.
Mathematica є інструментом програмування для обчислень, які використовуються в науці, математиці, обчислювальній техніці та в інших технічних галузях. Комерційний пакет обчислень вперше випущений в 1988 році, але його можете безкоштовно використовувати на RPi з ОС Raspbian.
Запуск Mathematica
Двічі клацніть значок Mathematica на робочому столі або відкрийте його з меню додатків, щоб запустити. Ви побачите заставку з червоним логотипом Mathematica під час завантаження програми:
Після завантаження побачите два вікна. Це інформаційне вікно Wolfram:
і блокнот Mathematica:
Програмування в Mathematica
Клацніть у вікні блокнота і введіть:
Print["Hello world"]
Натисніть Shift + Enter; буде запущена команда і виведено на екрані "Hello world", як:
Ви можете виконувати математичні обчислення, наприклад:
In[2]:= 2 + 2
Out[2]= 4
In[3]:= 16254 / 32
Out[3]= 8127 / 16
In[4]:= 1024 * 32
Out[4]= 32768
Редагування в блокноті
Ви можете повернутися раніше введений команду, натиснувши її або переміщуючи курсор редагування за допомогою клавіатури. Ви можете видалити, відредагувати або додати щось і натисніть Shift + Enter, щоб виконати нову команду на своєму місці.
Ви можете зберегти блокнот і повернутися до нього пізніше, відправити його другу, опублікувати в Інтернеті, або навіть передати його як домашнє завдання! Просто зайдіть в меню File > Save As у вікні блокнота.
Коли відкриваєте збережений блокнот, будуть показані всі попередні записи, зокрема всі входи і виходи. Ви можете виконати кожну клітину знову з Shift + Enter, або все відразу, вибравши з меню Evaluation > Evaluate Notebook.
Змінні
Ви можете зберегти результати обчислень в змінних:
radius = 5;
diameter = 2 * radius;
circumference = 2 * Pi * radius;
area = Pi * radius^2;
Зверніть увагу на крапку з комою в кінці кожного рядка, яка пригнічує вихідний друк.
Символічні значення
Зверніть увагу на використання вбудованого символу Pi, який містить символічне значення π. Це означає, що якщо ви передаєте його в рівняння, то зберігається посилання на істинне значення π, а не перетворюється на десяткове і не округляється:
In[19]:= Pi
Out[19]: π
In[20]:= tau = 2 * Pi
Out[20]: 2 π
Щоб отримати десяткове подання символічного значення, використайте функцію N:
In[5]:= N[Pi]
Out[5]: 3.14159
За замовчуванням кількість значущих цифр рівна 6, але можна задати більше, вказавши кількість через другий аргумент:
In[6]:= N[Pi, 10]
Out[6]: 3.141592654
Зверніть увагу, що це число цифр, а не знаків після коми; тому 3 входить в підрахунок, залишаючи 9 десяткових знаків після коми.
Списки
Можна зберігати колекції даних у списку:
nums = {1, 2, 3, 5, 8}
people = {"Alice", "Bob", "Charlotte", "David"}
Діапазон
Функція Range може бути використаний для отримання списку чисел:
Range[5] (*Числа від 1 до 5*)
Range[2, 5] (*Числа від 2 до 5*)
Range[2, 5, 2] (*Числа від 2 до 5 з кроком 2*)
Таблиці
Функція Table є способом отримання значення у списку з функцією:
Table[i ^ 2, {i, 10}] (*Квадрати чисел від 1 до 10*)
Table[i ^ 2, {i, 5, 10}] (*квадрати чисел від 5 до 10*)
Table[i ^ 2, {i, nums}] (*Квадрати чисел зі списку nums*)
Цикли
Ви можете запустити цикл кілька разів, або через більше пунктів у списку, з Do:
Do[Print["Hello"], {10}] (*Друк "Hello" 10 разів*)
Do[Print[i], {i, 5}] (*Друк чисел від 1 до 5*)
Do[Print[i], {i, 3, 5}] (*Друк чисел від 3 до 5*)
Do[Print[i], {i, 1, 5, 2}] (*Друк чисел від 1 до 5 з кроком 2*)
Do[Print[i ^ 2], {i, nums}] (*Друк квадратів чисел зі списку nums*)
Функція допомоги
Ви можете отримати допомогу по використанню функції, додавши знак питання (?) перед ім'ям функції і натиснувши Shift + Enter:
Функція пошуку
Ви можете також шукати для функцій, ввівши частину імені функції, яку шукаєте, і «зірочки». Просто почніть з (?) і додайте зірочку (*) наприкінці як шаблон:
In[15]:= ?Device*
Ви можете використовувати декілька символів підстановки:
In[16]:= ?*Close*
Коментарі
Як видно з попередніх прикладів, ви можете залишити в сценаріях коментарі (примітки, які ігноруються в програмі) за допомогою амперсантів ((&)) і зірочок (*):
Print["Hello"] (*Print "Hello" to the screen*)
Доступ до командного рядка Wolfram
Програми командного рядка
Ви також можете отримати доступ до мови Wolfram (/usr/bin/wolfram) з командного рядка, ввівши wolfram в терміналі, або двічі клацнувши значок Wolfram на робочому столі. Це дасть тільки текстове (без графіки) середовище програмування з інтерфейсом у стилі In[x] / Out[x], але без інтерактивної функціональності блокнота. Функції Mathematica будуть працювати очікувано як і раніше:
Ви знайдете інтерфейс командного рядка більш швидким при використанні через відсутність графічної обробки, необхідної для виконання блокноту, однак йому не вистачає інтерактивності графічного інтерфейсу і швидкого виводу.
Для виходу натисніть Ctrl + D.
Аналогічно, mathematica - інтерфейс блокнота для Mathematica (/usr/bin/mathematica)
Запуск скриптів з Wolfram
Ви можете написати програму, зберегти її як звичайний файл (зазвичай файл з розширенням .m або .wl) і виконати сценарій з командного рядка, додавши прапор -script.
Для запуску test.m:
wolfram -script test.m
Для виконання сценарію при запуску відредагуйте файл /etc/rc.local, в якому вкажіть команди.
Графіки
Ви можете побудувати цікаві речі, використовуючи Mathematica, наприклад, намалювати Бетмена:
Або побудувати echidnahedron за допомогою наступної команди:
Graphics3D[{Opacity[.5], Glow[Red], EdgeForm[White], PolyhedronData["Echidnahedron", "Faces", "Polygon"]}, Lighting -> None]
Підключення пристроїв та зовнішніх сервісів
Команди для підключених пристроїв:
DeviceRead ▪ DeviceReadList ▪ DeviceReadTimeSeries ▪ DeviceReadBuffer ▪ ...
DeviceWrite ▪ DeviceExecute ▪ BinaryRead
Стандартні пристрої:
"GPIO" - доступ на читання/запис для всіх виводів GPIO
"Serial" - читання/запис для вбудованих і зовнішніх послідовних з'єднань
"RaspiCam" ▪ "AudioOut"
Додаткові пристрої:
"UltimateGPS" ▪ "PiWeather" ▪ ...
Зовнішні сервіси:
SendMail - відправити електронний лист з RPi
SendMessage - відправити твіт або інше повідомлення
GPIO
Ви можете отримати доступ до виводів GPIO з Mathematica, використовуючи функції DeviceWrite і DeviceRead.
Щоб отримати доступ до виводу GPIO вам потрібно запуститися від root. Щоб зробити це, виконайте sudo wolfram з терміналу (це буде працювати з командного рядка середовища wolfram), або команду sudo mathematica &, щоб запустити блокнот Mathematica від root.
Наступна команда включає контакт 14 GPIO (з використанням нумерації BCM для контактів):
DeviceWrite["GPIO", 14 -> 1]
Наступна команда вимикає вивід 14:
DeviceWrite["GPIO", 14 -> 0]
Ви також можете прочитати статус вхідного пристрою GPIO (для перевірки, чи натиснута, наприклад, кнопка) з DeviceRead, аналогічним чином:
button = DeviceRead["GPIO", 14]
Тепер змінна button повинна містити 0 для виключеного виводу або 1 для включеного.
Приклад використання мови Wolfram для керування світлодіодами наведений в статті.
Камера
Ви можете робити знімки з камери, використовуючи функцію DeviceRead. По-перше, підключити камеру, як це робили на попередні заняттях.
Для того, щоб отримати нерухоме зображення з камери, введіть наступну команду:
img = DeviceRead["RaspiCam"]
Потім, щоб зберегти зображення у вигляді файлу, використайте Export і вкажіть шлях та змінну, що містить збережене зображення:
Export["/home/pi/img.jpg", img]
(За матеріалами raspberrypi.org
)