Привет всем и спасибо за внимание,
Объяснение окружающей среды
Я работаю над приложением, которое связывается с arduino (сервером, для всех практических целей), которое прослушивает порт 2000. Подключение к arduino осуществляется через специальную сеть, поэтому IP-адрес " Сервер "169.254.1.1. После подключения клиент получит IP-адрес в подсети 169.254.0.0.
Мой текущий код
После небольшой переделки (это мой первый опыт в Objective C), мне удалось открыть сокет и установить поток чтения / записи между iPhone и Arduino с помощью следующего кода ...
В (void)viewDidLoad
я звоню
[self initNetworkCommunication];
И определить это следующим образом ...
-(void) initNetworkCommunication
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"169.254.1.1", 2000, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
}
Я создал эту функцию для отправки определенного байта, однако я не уверен, правильно ли я это делаю. Объяснение отправки байтов в шестнадцатеричном / двоичном формате было бы очень полезно, так как я не нашел хорошего учебника / фрагмента кода в своем исследовании. Это работает на таймере (для удержания кнопки), который работает нормально. Мне особенно интересно, правильно ли я посылаю байт.
- (void)sendByte:(NSTimer *)timer
{
Byte allDown = 0x00F0;
NSMutableData *sendData = [NSMutableData dataWithLength:sizeof(allDown)];
[sendData appendBytes:&allDown length:sizeof(allDown)];
[outputStream write:[sendData bytes] maxLength:[sendData length]];
}
Мои проблемы / вопросы
После создания / тестирования этого приложения на моем iPhone я подключился к Arduino и нажал кнопку, прикрепленную к функции sendByte, и увидел, что светодиоды моего индикатора (на arduino) загорелись, как рождественская елка. Единственный способ включения этих светодиодов - это когда ардуино получает определенные байты через порт 2000. Это странно, потому что я думал, что посылаю только один конкретный байт 0x00F0. В вышеприведенном коде есть ли причина, по которой будут отправляться байты, отличные от 0x00F0? т. е. отправляет ли байты открытие сокета и потоков чтения / записи?
Кроме того, пример отправки двоичных данных (то есть 0001 или 10000000) или шестнадцатеричных данных (то есть 0F) в сокет / поток был бы очень полезен. Если я делаю это совершенно неправильно, или если есть более простой способ отправки байтов на сервер, мне было бы интересно узнать об этом!
Если требуется какая-либо дополнительная информация, пожалуйста, спросите, и я сделаю все возможное, чтобы предоставить.
Спасибо, что нашли время, чтобы прочитать это, я с нетерпением жду каких-либо ответов!
- Джон