Как я могу использовать свои скетчи Arduino в своей IDE Raspberry Pi?

Я установил Arduino IDE 2:1.0.5 на свой Raspberry Pi3 под Raspbian и использую коблер, который обеспечивает хороший макет. На этом макете я установил Arduino Nano для считывания аналогового напряжения, которое затем передается обратно на Rpi3 через последовательный порт USB, который отображается как /dev/ttyUSB0 на Rpi3.

Этот порт открывается как обычный файл в Python для дальнейшей обработки, такой как добавление даты & метка времени (полученная сервером NTP) и сохранение результатов в файл данных, который отображается в gnuplot 4.6.

PiBerry

Вы заметите, что я использую 3,3 В для вентилятора, чтобы он работал тихо, а два провода, идущие вверх, идут к источнику напряжения, который я отслеживаю. Если присмотреться, то можно увидеть схему делителя напряжения.

Вот сегодняшнее напряжение солнечной электростанции, которое отслеживает эта штука. Блок внизу означает, что инвертор был включен. Зеленый означает, что батарея полностью заряжена.

Банк фотоэлектрических батарей

В любом случае получается, что такое же последовательное соединение поддерживается Rpi Arduino IDE для программирования.

Вместо того, чтобы программировать Nano на ноутбуке и постоянно отключать/подключать его к макетной плате, я хочу использовать Rpi Arduino IDE для программирования.

Поэтому я перенес все свои наброски из Arduino IDE на ноутбуке в Rpi.

Но

.... тогда каждый раз, когда я запускаю Rpi IDE, он выдает сообщения об ошибках для всех скетчей, в именах которых есть символы подчеркивания. Оказывается, версия Rpi разрешает только буквенно-цифровые имена каталогов. У меня есть пара десятков набросков, и это непродуктивно. Для этого требуется нажимать OK для каждого пропускаемого каталога, а это оказывается для всех.

Итак, мой вопрос: что я могу с этим сделать?

, 👍2

Обсуждение

Возможно, вы могли бы указать, какую операционную систему вы установили на свой Raspberry Pi и какая версия IDE установлена., @James Waldby - jwpat7

Небольшой комментарий: версия arduino IDE 1.0.5 довольно старая.. Возможно, стоит обновиться до 1.8.1 (однако вы не можете использовать apt; просто зайдите на [страницу загрузки Arduino](https://www. arduino.cc/en/Main/Software) и скачайте ARM-версию (кажется), @frarugi87

А, я вижу там 1.8.1. И да, я использовал apt-get install, чтобы сделать это в первую очередь. Не уверен, что у меня есть всезнайка, чтобы сделать это по-другому. При этом работает отлично. Мне нравится иметь возможность перепрограммировать свои устройства, которые находятся снаружи и далеко, без необходимости возвращать их обратно к ноутбуку и рисковать погнуть контакты и т. д. Я могу выполнять обновления практически без простоев., @SDsolar

Обязательный XKCD: https://xkcd.com/1205/, @Etzeitet


3 ответа


Лучший ответ:

2

Чтобы решить эту проблему, я придумал следующую процедуру, которая удаляет все символы подчеркивания из каталогов & имена файлов и каждое слово пишется с заглавной буквы.

Сначала я скопировал все свои скетчи и библиотеки (из каталога мои документы/arduino) на USB-накопитель.

При установке Rpi Arduino IDE создает каталог альбомов для рисования, поэтому я

Скопировал папку с библиотеками в ~/sketchbook/libraries

Скопировал папку с скетчами в ~/sketchbook/AMSsketches

Затем я написал собственный скрипт, который копируется в мой домашний каталог на Rpi, который можно получить здесь в виде текстового файла (используйте Chromium или wget, чтобы скопировать его в файл ~/AMS2Rpi). Вот ссылка: http://calttc.net/AMS2Rpi

который содержит этот код:

#! /бин/баш
#
# AMS2Rpi - конвертирует имена скетчей MS Arduino IDE в имена скетчей RPI Arduino IDE
#
# SDsolar 2017-01-29
#
# Причина: Arduino IDE на MS вставляет символы подчеркивания в файл & имена каталогов
# Arduino IDE на Rpi отклоняет все символы, кроме буквенно-цифровых
#
# Решение: удалить все символы, кроме буквенно-цифровых.
# и писать каждое слово в именах с большой буквы
#
# Использование:
# Установите Raspbian Arduino IDE 2:1.0.5 на Raspberry Pi 3.
# Используйте флэш-накопитель USB для копирования скетчей и библиотек из Arduino IDE на базе MS.
# На Rpi скопируйте каталог библиотек в ~/sketchbook/libraries
# На Rpi скопируйте каталог скетчей в ~sketchbook/AMSsketches
# Скопируйте этот скрипт в свой домашний каталог как AMS2Rpi, используя Chromium
# CD
# chmod +x AMS2Rpi
# ./AMS2Rpi (это займет некоторое время)
# кошка /tmp/AMS2Rpi | grep "AMSsketches" >~/AMSRpiQ
# chmod +x ~/AMS2RpiQ
# ~/AMS2RpiQ
# Откройте Rpi Arduino IDE
#
# В качестве альтернативы, если у вас много скетчей, вы можете
# измените "mv -i" ниже на "mv"
# и вставьте его в AM2SRpiX выше
# поэтому вам не нужно отвечать "y" на каждое переименование.
#
# Спасибо Марко Фьоретти за его статью на http://www.techrepublic.com/blog/linux-and-open-source/how-to-remove-weird-characters-from-file-and-directory-names-automatically /
# -------------------------------------------------- --------------------
rm -f /tmp/AMS2R*
CD $1
находить . | awk '{длина печати(), $0 | "сортировать -n -r" }' | \
grep -v '^1 \.$' | вырезать -d/ -f2- > /tmp/AMS2Rpi_1
коснитесь /tmp/AMS2Rpi_2
при чтении строки
делать
BASE=`базовое имя "$line"`
NEWBASE=`базовое имя "$line" | perl -e '$N = <>; жевать ($N); $N =~ s/[^a-zA-Z0-9.]//g; $N =~ с/_+/_/г; $N= lc($N); $N =~ s/_([az])/_.uc($1)/например; напечатать ucfirst($N);' `
если [ "$BASE" != "$NEWBASE" ]
затем
OLDPATH=$(echo "$line" | sed -r 's/([^a-zA-Z0-9./_-])/\\\1/g')
DIR=$(dirname "$line" | sed -r 's/([^a-zA-Z0-9./_-])/\\\1/g')
echo "mv -i $OLDPATH $DIR/$NEWBASE" >> /tmp/AMS2Rpi_2
фи
готово </tmp/AMS2Rpi_1
rm -f /tmp/AMS2Rpi_1
mv /tmp/AMS2Rpi_2 /tmp/AMS2Rpi
Выход

Затем сделайте его исполняемым и запустите:

#! /bin/bash
#
#  AMS2Rpi - Converts MS Arduino IDE Sketch names to RPI Arduino IDE Sketch names
#
#                  SDsolar      2017-01-29
#
#  Reason:    Arduino IDE on MS inserts underscore characters in file & directory names
#             Arduino IDE on Rpi rejects all but alphanumeric characters
#
#  Solution:  Remove all but alphanumeric characters 
#             and capitalize each word in the names
#
#  Usage:  
#    Install Raspbian Arduino IDE 2:1.0.5 on the Raspberry Pi 3
#    Use a USB flash drive to copy sketches and libraries from the MS-based Arduino IDE
#      On the Rpi, copy the libraries directory to ~/sketchbook/libraries
#      On the Rpi, copy the sketches directory to ~sketchbook/AMSsketches
#    Copy this script to your home directory as AMS2Rpi using Chromium
#    cd
#    chmod +x AMS2Rpi
#    ./AMS2Rpi    (This will take some time)
#    cat /tmp/AMS2Rpi | grep "AMSsketches" >~/AMSRpiQ
#    chmod +x ~/AMS2RpiQ
#    ~/AMS2RpiQ
#    Open the Rpi Arduino IDE 
#
#  Alternatively, if you have a lot of sketches you might want to
#    change the "mv -i" below to "mv" 
#    and cat it into AM2SRpiX above
#    so you don't need to answer "y" for every rename.
#
#  Props to Marco Fioretti for his article at http://www.techrepublic.com/blog/linux-and-open-source/how-to-remove-weird-characters-from-file-and-directory-names-automatically/
# ---------------------------------------------------------------------
rm -f /tmp/AMS2R*
cd $1
find .  | awk '{ print length(), $0 | "sort -n -r" }' | \
        grep -v '^1 \.$' | cut -d/ -f2- > /tmp/AMS2Rpi_1
touch /tmp/AMS2Rpi_2
while read line
  do
  BASE=`basename "$line"`
  NEWBASE=`basename "$line" | perl -e '$N = <>; chomp ($N); $N =~ s/[^a-zA-Z0-9.]//g; $N =~ s/_+/_/g; $N= lc($N); $N =~ s/_([a-z])/_.uc($1)/eg; print ucfirst($N);' `
  if [ "$BASE" != "$NEWBASE" ]
  then
  OLDPATH=$(echo "$line" | sed -r 's/([^a-zA-Z0-9./_-])/\\\1/g')
  DIR=$(dirname "$line" | sed -r 's/([^a-zA-Z0-9./_-])/\\\1/g')
  echo "mv -i $OLDPATH $DIR/$NEWBASE" >> /tmp/AMS2Rpi_2
  fi
done </tmp/AMS2Rpi_1
rm -f /tmp/AMS2Rpi_1
mv /tmp/AMS2Rpi_2 /tmp/AMS2Rpi
exit

По завершении я отфильтровываю только тот каталог, который мне нужен (ОЧЕНЬ ВАЖНО):

cd
chmod +x AMS2Rpi
./AMS2Rpi

(Вы можете просмотреть этот файл, чтобы проверить его перед запуском)

cat /tmp/AMS2Rpi | grep "AMSsketches" >~/AMS2RpiQ

Очистить, если хотите:

chmod +x ~/AMS2RpiQ
~/AMS2RpiQ

Теперь Arduino IDE на Rpi открывается чисто, и все мои скетчи там.

Проблема решена. Он отлично работает.

,

Это напоминает мне шутку программистов, которую я читал некоторое время назад, в которой говорилось: «Программист — это тот, кто за месяц разрабатывает программу, автоматизирующую одночасовую задачу»;), @frarugi87

Это очень хорошо. Я бы только добавил, что пенсионеры - самые плохие. ;-), @SDsolar


0

Оказывается, есть два более простых ответа, если вы хотите сделать это вручную.

Вы можете использовать интегрированную среду разработки Windows для загрузки каждого скетча, а затем сохранить их под допустимым именем перед передачей.

Таким образом, вместо того, чтобы выполнять программу, просто сделайте это вручную - это лучше, если у вас их не слишком много или если вы очень терпеливы.

Или прыгайте обеими ногами: используйте флэш-накопитель USB, чтобы просто переместить свои библиотеки и скетчи в соответствующие каталоги в альбоме для рисования.

libraries go to ~/sketchbook/libraries
sketches go to ~/sketchbook/sketches
Go into the IDE preferences and tell it to look into ~/sketchbook/sketches

Вручную переименовать любые каталоги в обоих каталогах, чтобы они содержали только буквенно-цифровые символы в именах подкаталогов

В версии Arduino IDE для Rpi нет проблем с именами файлов, содержащими символы подчеркивания. Это просто каталоги, которые он отклоняет, если они не являются строго буквенно-цифровыми. Но он действительно предпочитает, чтобы файлы имели те же имена, что и каталоги.

Each library must be added to the IDE using the 
IDE menu Sketch..Import Library..Add Library

Он хранит их в другом месте внутри IDE.

,

Я мог бы добавить, что это работает нормально, если у вас нет 40 скетчей и библиотек, которые игнорируются из-за этой ошибки., @SDsolar


0

вот выражение, которое удаляет каждый символ, который не является (буквенно-цифровым или пробельным символом, или символом точки), за которым также следует буквенно-цифровой символ, пробел или точка, и заменяет его следующим символом с заглавной буквы.


find  ./ -depth | perl -wan -F'/' -e ' chomp; chomp($F[-1]);$x=$_; if ($F[-1]=~m/[^\p{Alnum}\d \.]/ and substr($F[-1],0,1) ne ".") {  $F[-1]=~s/[^\p{Alnum}\d \.]+([\p{Alnum}\d \.]{1})/uc($1)/eg; $y = join "\\",@F; system("mv",$x,$y);print "mv \"$x\" \"$y\"\n";}' 

игнорирует скрытый файл unix, начинающийся с "." И это также переименовывает каталоги.

Это не сработает в крайних случаях, когда последний символ в имени не является буквой.

,