да, действительно проблема в newsoftserial. сегодня попробовал с Arduino Mega.

PHP код:
byte tmp;

void setup() 
{
Serial.begin(9600);
Serial1.begin(9600);
}

void loop()
{
if (
Serial1.available() > 0) {
tmp Serial1.read();
Serial.write(tmp);
}

Результат: приходят корректные данные. Тут же попробовал с другим Arduino с использованием софтового порта

PHP код:
#include <NewSoftSerial.h>

NewSoftSerial ibus(78);
byte tmp;

void setup() {
Serial.begin(9600);
ibus.begin(9600);
}

void loop()
{
if (
ibus.available() > 0) {
tmp ibus.read();
Serial.write(tmp);
}

Результат: первые 2-3 байта и каша. Посмотрев на это дело в trminal поигравшись с настройками стоп байтов и числом приходящих байтов увидел более менее похожие на правду данные.