ПК TinyOS для общения

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

Я использую интерфейсную плату MIB520 с TinyOS-2.1.2, установленной на IRIS. Я пробовал различные утилиты из sdk / c / sf, а также инструменты из пакетов Java net.tinyos.sf. * И net.tinyos.tools. *.

Что я пробовал до сих пор:

Я использую приложения /BaseStation и приложения /BaseStation15.4, установленные на моем мотеле, альтернативно прошивая его приложениями /test/TestSerial. У меня нет проблем с чтением данных, отправленных из мот через USB. Я могу прочитать это прекрасно, используя net.tinyos.tools.SerialForwarder или утилиты из sdk / c / f или net.tinyos.tools *.

Но когда дело доходит до отправки данных с компьютера в MOTE, кажется, ничего не работает. Я использовал net.tinyos.tools.Send, serialsend.c, sf.c и sfsend.c. Через некоторое время SerialForwarder выдает сообщение об ошибке, а утилиты C выдают ошибку "без подтверждения".

После поиска ответа на TinyOS Wiki и SO, я подумал, что это может быть проблема с отправкой этого сообщения "ack". Я искал способ сгенерировать и отправить законный пакет, как предложено здесь.

После статьи в вики я нашел соответствующий TEP и использовал биты, перечисленные в нем ("7e 40 09 00 be ef 05 7d 5d 06 01 02 03 04 05 7e").

Я использовал Wireshark, чтобы прослушать USB, по которому я отправлял данные в мот, и видел те же биты, отправленные в мот. Моя теория заключается в том, что либо Mote не распознает отправленные мной данные, либо я использую утилиты неправильно. Во всяком случае, это конкретное событие никогда не срабатывает:

event message_t* UartReceive.receive(message_t* bufPtr, void* payload, uint8_t len) {
    call Leds.led0On();
    return bufPtr;
}

У меня вопрос, как мне отправлять данные на компьютер? Возможно, есть какая-то готовая утилита, которую я пропустил? Я следовал инструкциям в BaseStation15.4, но я застрял.

Редактировать:

Из BaseStation/README.txt "BaseStation подтверждает сообщение, поступившее по последовательному каналу, только в том случае, если это сообщение было успешно помещено в очередь для доставки по радиоканалу". Это объясняет "нет подтверждения" в serialsend.c и "ошибка записи" в SerialForwarder.java.

Но, тем не менее, событие UartReceive.receive() никогда не запускается, даже после очистки его тела (в BaseStation) и оставления только светодиодного переключателя.

1 ответ

Решение

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

Вот что я сделал, чтобы запустить 2 программы: 1. Установите приложение BaseStation на них обоих.

make iris install,1 mib520,/dev/ttyUSB0
make iris install,2 mib520,/dev/ttyUSB0
  1. Запустив SerialForwarder, запустив оба мотива (включая подключенный к USB с помощью MIB520).

    java net.tinyos.sf.SerialForwarder -port 9002 - серийный номер @/dev/ttyUSB2:57600

Здесь я не смог понять, что последовательный @ / dev / ttyUSB2 не всегда является подходящим интерфейсом для общения с мотесами. Потому что UART использует 2 USB-линии для связи (одна для записи в мот, а другая для чтения данных из мот). Я попробовал несколько других строк, таких как /ttyUSB1, /ttyUSB3, /ttyUSB4. Один из них обычно работает, понятия не имею, как это происходит.

  1. Когда SerialForwarder готов, вы должны увидеть несколько сообщений:

Прослушивание сериала @/dev/ttyUSB1:57600

Прослушивание клиентских подключений через порт 9002 serial@/dev/ttyUSB1:57600: повторная синхронизация

Теперь вы можете использовать другие утилиты для отправки и получения данных

java net.tinyos.tools.Send 00 FF FF 00 00 04 22 06 00 02 00 01

java net.tinyos.tools.Listen

Некоторая дополнительная информация о моей конфигурации

OS: Linux kali 4.0.0-kali1-amd64 #1 SMP Debian 4.0.4-1+kali2 (2015-06-03) x86_64 GNU/Linux

TinyOS release:  2010-01-20 20:00:48, TinyOs-2.1.2

Мои переменные env (я использую рыбную раковину)

cat  ~/.config/fish/config.fish 
# Here we setup the environment variables needed by the tinyos make system

set -Ux "TOSROOT" "/opt/tinyos-release-tinyos-2_1_2"
set -Ux "TOSDIR" "$TOSROOT/tos"
set -Ux "CLASSPATH" "$TOSROOT/support/sdk/java"
set -Ux "MAKERULES" "$TOSROOT/support/make/Makerules"
set -Ux "PYTHONPATH" "$TOSROOT/support/sdk/python"

echo "setting up TinyOS on source path $TOSROOT"

Я надеюсь, что это сэкономит кому-то время.

Другие вопросы по тегам