Поэтому я пытался подключить этот приемопередатчик HC-05 на мой MSP-430G2. Поскольку я использую MacBook, я пытаюсь отправлять сообщения с помощью PySerial. Я использую:
- OS X 10.9.5
- Питон 2.7
- МСП-430G2553
- Энергия 0101E0016
Это мой код Энергии:
int gLed = GREEN_LED;
void setup()
{
pinMode(gLed, OUTPUT);
digitalWrite(gLed,LOW);
Serial.begin(9600);
}
void loop()
{
int buf_size = Serial.available();
if (buf_size > 0) {
char input = Serial.read();
if (input == '1'){
digitalWrite(gLed, HIGH);
}
else if (input == '0'){
digitalWrite(gLed, LOW);
}
}
}
После того, как я проверю и загружу это на микроконтроллер, я подключу 3,3 В к VCC, GND к земле, TXD-RXD от трансивера к P1.2-P1.1 на микроконтроллере (напротив, это означает, что TXD на трансивере входит в P1.2). (RXD) и наоборот), а GND и VCC от трансивера к верхним контактам GND и VCC с обеих сторон микроконтроллера. Затем я подключаю свой ноутбук к HC-05 и использую следующие скрипты на Python для отправки сообщений:
import serial
s = serial.Serial(port='/dev/tty.HC-05-DevB', baudrate=9600)
s.write('1')
Что происходит, ничего. Абсолютно ничего. И трудно понять, какой шаг я испортил, поскольку это может быть любой из них. Это PySerial? Это как я его подключаю? Это мой код Энергии? Любая подсказка будет очень полезна. Большое тебе спасибо.
ОБНОВЛЕНИЕ: этот код работал:
void loop()
{
int buf_size = Serial.available();
if (buf_size > 0) {
digitalWrite(gLed, HIGH);
delay(1000);
digitalWrite(gLed, LOW);
delay(1000);
}
}
Светодиод начал мигать после того, как я закончил писать предыдущий скрипт Python. Возможно, важно отметить, что он начал мигать только после того, как я написал s.write('1')
(или любую другую строку в качестве аргумента) в Python. Также это не прекращается после того, как я напишу s.close()
и отключу трансивер HC-05 от своего компьютера.
Я думаю, это означает, что соединение установлено, но по какой-то причине операторы if не работают должным образом. Большое спасибо за помощь всем вам, ребята. Я был бы очень признателен, если бы кто-нибудь помог мне понять, что не так с оценкой сообщения.
ОБНОВЛЕНИЕ 2: этот код также работал:
void loop()
{
int buf_size = Serial.available();
if (buf_size > 0) {
char input = Serial.read();
if (input){
digitalWrite(gLed, HIGH);
delay(1000);
digitalWrite(gLed, LOW);
delay(1000);
}
}
}
Каждый раз, когда я отправлял ввод, свет включался, а затем выключался. Он оставался выключенным, пока я не отправил другой ввод. Я думаю, это означает, что входные данные принимаются трансивером и передаются на микропроцессор. Проблема может заключаться в том, что входные данные, которые я отправляю, не распознаются микропроцессором.
Проблема в том, что я отправляю однобайтовые символьные сообщения, которые я ранее определил в своем коде Energia. Я использую Python 2.7 и пробовал разные способы отправки сообщений из PySerial, включая: s.write('1')
, s.write(1)
, s.write(b'1')
, s.write('1'.encode())
, s.write(bytearray('1'))
. На данный момент я действительно не знаю, как отправить его таким образом, чтобы это помогло мне решить эту проблему, но я считаю, что на этом этапе я смог сузить его до PySerial.
ОБНОВЛЕНИЕ 3: Ситуация становится все более странной. Заставив MCU мигать в соответствии с его вводом, я заметил следующую ситуацию.
Когда я использовал s.write('1')
, приемопередатчик Bluetooth получил двоичный файл «11110100». После этого я попытался использовать s.write('2')
и s.write('3')
и понял, что они были получены моим MCU как один и тот же двоичный файл: «11110100». Следующее, что я сделал, это попробовал s.write('4')
и понял, что это дало тот же результат, что и s.write('1')
. Я написал следующий скрипт, чтобы попробовать его (также включает скрипт для распечатки ввода с помощью мигания светодиода).
void loop()
{
int buf_size = Serial.available();
if (buf_size > 0) {
char input = Serial.read();
if (byte(input) == B11110100){
for (int i=0; i < 10; i++){
digitalWrite(rLed, HIGH);
delay(100);
digitalWrite(rLed, LOW);
delay(100);
}
}
else if (input){
digitalWrite(gLed, HIGH);
digitalWrite(rLed, HIGH);
delay(1000);
digitalWrite(gLed, LOW);
digitalWrite(rLed, LOW);
delay(1000);
for (int i=0; i < 8; i++){
int val = bitRead(input,i); // get the voltage from the microphone
if (val == 0){
digitalWrite(rLed, HIGH);
delay(1000);
digitalWrite(rLed, LOW);
}
else if (val == 1){
digitalWrite(gLed, HIGH);
delay(1000);
digitalWrite(gLed, LOW);
}
delay(1000);
}
}
}
}
И s.write('1')
, и s.write('4')
дают одинаковый результат. Кто-нибудь знает, о чем это может быть? Большое спасибо за вашу помощь и время.
РЕШЕНИЕ: Я понял, что Energia не была настроена для работы с моей моделью MSP, а была тесно связана с ней. Исправление, которое устранило все проблемы. Спасибо всем за вашу помощь.