CC3000 получает неправильный адрес при подключении к wifi точке доступа

Сначала я попытался использовать библиотеки SparkFun и Adafruit CC3000 с тем, что я на самом деле хотел в качестве программы, но когда это не сработало, примеры для этих библиотек, и я, кажется, всегда сталкиваюсь с одной и той же проблемой.

CC3000 подключится к моей точке доступа, которая использует частный адрес в диапазоне 172.24.1.1 / 24, и каким-то образом он получит адрес 192.168.1.64.

Я знаю, что он подключается, так как событие iw отображает MAC-адрес устройства при подключении.

Единственные изменения, которые я внес в исходный код на данный момент, - это ssid и пароль, а также изменение контактов прерывания и vbat в соответствии с конфигурацией платы tinyduino cc3000.

Устройство имеет прошивку 1.34. Вот код.

Конкретный результат, который я получаю от arduino, выглядит следующим образом (обратите внимание, что я прокомментировал отключение внизу):

Connected at 115200

---------------------------------
SparkFun CC3000 - Connection Test
---------------------------------
CC3000 initialization complete
Connecting to: my_wifi_ap
Connected!

CC3000 MAC Address: 70:FF:76:04:B9:5B
IP Address: 192.168.1.62
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.1.254
DHCP Server: 0.0.0.0
DNS Server: 192.168.1.254
SSID: my_wifi_ap

Finished connection test

запуск iw event -f на моей точке доступа перед запуском теста подключения дает мне следующий результат:

wlan0: new station 70:ff:76:04:b9:5b

Когда другое устройство, например мой телефон, подключается к этой точке доступа, мы получаем 172.24.1.xx, где xx - это любое число от 50 до 150, которое нам назначает DHCP.

ОТРЕДАКТИРОВАНО: Кроме того, если я закомментирую отключение в конце теста, я увижу, что устройство отправляет keepalives каждые три или четыре секунды, используя:

iw dev wlan0 station get 70:ff:76:04:b9:5b  // (время бездействия никогда не превышает 4000 мс). 

Я не могу выполнить пинг 192.168.1.64, потому что эта сеть явно недоступна, но попытка выполнить пинг 172.24.1.64 дает мне исключение:

icmp open socket: Operation not permitted

Вывод из примера Adafruit:

RX Buffer : 131 bytes
TX Buffer : 131 bytes
Free RAM: 1221

Initialising the CC3000 ...
Firmware V. : 1.32
MAC Address : 0x70 0xFF 0x76 0x04 0xB9 0x5B
Started AP/SSID scan

Networks found: 20
================================================

...

SSID Name    : my_wifi_ap
RSSI         : 83
Security Mode: 3

SSID Name    : my_other_wifi_ap
RSSI         : 67
Security Mode: 3

...

================================================

Deleting old connection profiles

Attempting to connect to my_wifi_ap
Started AP/SSID scan


Connecting to my_wifi_ap...Waiting to connect...Connected!
Request DHCP

IP Addr: 192.168.1.62
Netmask: 255.255.255.0
Gateway: 192.168.1.254

Фактическое подключаемое устройство - это точка доступа Raspberry Pi, которая была настроена с помощью DNSMASQ и hostapd. Конфигурация работает и, как было доказано, работает с другими встроенными сетевыми устройствами.

, 👍1

Обсуждение

Какое устройство является вашей точкой доступа? Можете ли вы запросить у него IP-адрес новой станции? Можете ли вы опубликовать результаты из примера Adafruit?, @SoreDakeNoKoto

Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что речь идет о версиях прошивки CC3000, а не об Arduino. Кроме того, постер давно отказался от вопроса, не приняв даже их собственное очевидное решение, и не входил в систему более года, а это означает, что этот не по теме вопрос, скорее всего, останется навсегда заброшенным., @Chris Stratton


2 ответа


0

Добро пожаловать в удивительный мир программного обеспечения Adafruit. Какой-то гений решил, что CC3000 должен сохранять первый адрес, который он когда-либо получал в энергонезависимом хранилище, и с тех пор использовать его независимо от того, что впоследствии может сообщить DHCP. Проверьте источник библиотеки.

,

Я решил эту проблему, понизив прошивку до версии, предложенной для использования с библиотекой adafruit, но на самом деле это кажется столь же правдоподобной причиной, почему она не работала. Не знаю, почему библиотека Sparkfun тоже не сработала, но это явно НЗП., @Partinarel


1

Я понял, что использую на плате прошивку версии 1.34, с которой она была настроена, когда я ее получил, и решил, что попробую понизить ее до одного из наборов fir; ware, поставляемых adafruit, чтобы посмотреть, сработает ли это.

Программа модификации прошивки на самом деле не компилировалась в настольной версии arduino ide, поэтому я решил вместо этого использовать codebender.

Я не уверен, должен ли я испытывать разочарование или облегчение, но понижение версии прошивки действительно заставило ее работать. Я использовал файл под названием driverpath_1_11, который, как я полагаю, библиотеки называют версией прошивки 0x113 или 0x118, которая идентифицирует себя как версия прошивки 1.24, которая каким-то образом действительно работала.

Решение находится здесь: https://codebender.cc/sketch:318229

Пины были изменены, чтобы соответствовать фиксированным пингам, используемым tinyduino.

,

Пожалуйста, примите либо ваш ответ, либо другой, чтобы вопрос считался решенным и не привлекал к себе внимания., @Chris Stratton