nRF51822아르두노

최근 BLE관련 공부회를 시작했습니다.최근 Maker활동에서 제작하는 Mbedded장치는 Connectivity가 매우 중요합니다.디바이스 단독으로 동작하기보다는 복수의 디바이스와 서버, 또는 클라우드와 연동되어서 사용하게 됩니다.그래서 외부와 인터페이스하는 미디어가 필요합니다.고전적인 통신 방법인 RS-232C, RS-485는 물론 유선 LAN까지 유선은 다시 푸대접 받고 있습니다.요즘은 무선 통신이 주류입니다.무선 통신에는 Wi-Fi, BTclasic, BLE, ZigBee, ZigWave가 이런 용도로 많이 이용되고 있습니다.그 중에서 Wi-Fi와 BLE는 최근 대부분의 사람이 소유한 최고의 단말기인 스마트 폰에 기본적으로 채용되는 무선 통신 방식입니다.그래서 Wi-Fi와 BLE통신을 자신의 디바이스가 지원하면 쉽게(?)스마트 폰과 연계하여 매우 다양할 수 있습니다.또 시스템을 구축할 때 디바이스 간, 서버 및 Cloud와 제휴하고 생산성이 높은 일을 해낼 수 있습니다.그래서 최근 이중의 하나인 BLE을 채용하기 위해서 공부를 하고 있습니다.

BLE의 경우 espressif ESP32와 nordic nRF52를 사용하고자 합니다. nRF52는 nRF52840과 nRF52832, nRF52811을 사용하려고 합니다.

개발 TOOL은 SES와 J-Link를 사용, 개발 툴은 노르딕 SDK와 softdevice를 활용할 생각입니다.여기에 Arduino환경도 병행하고 채용을 하려고 합니다.킬러 툴로 키우려면 SES환경에서 nordic SDK기반으로 하는 게 옳습니다만, 간편하게 쉽게 사용하려면 Arduino환경도 나름대로 생산성이 높아 보이거든요.마치 STC-M도 STM32CubeIDE와 Arduino의 관계와 같은 개념입니다.최근 nRF52832, nRF52840기준으로 SES+SDK환경과 Arduino환경 모두를 세트 하고, 기본 동작을 시도했습니다.부품 상자를 정리하고 보니 이전에 구입했던 nRF51822구형의 모든 것이 몇가지 눈에 띄었죠.구형이니까 BLE 4.x만큼 지원한 녀석으로 구매만 해놓고 공부는 안 했기 때문에 못 썬 놈이었습니다.최근 이것 저것 정보를 찾다 보니 이 녀석도 한번 실험을 하고 보기로 했습니다.이것은 깊이 쓰는 놈 아니라 단순히 Arduino기반으로 작업을 하고 보기로 했습니다.일단 낡은 모델이라 SES에서는 SDK로부터 도움이 없어 IAR, KEIL, GCC만 되고 있군요.

개발 TOOL은 SES와 J-Link를 사용하고, 개발 툴은 노르딕 SDK와 soft device를 활용할 것입니다.여기에 Arduino 환경도 병행하여 채용을 하고자 합니다.킬러툴로 키우려면 SES 환경에서 nordic SDK 기반으로 하는 것이 맞지만, 손쉽고 쉽게 사용하려면 Arduino 환경도 나름 생산성이 높을 것 같기 때문입니다.마치 STC-M도 STM32 CubeIDE와 Arduino의 관계와 같은 개념입니다.최근 nRF52832, nRF52840 기반으로 SES+SDK 환경과 Arduino 환경을 모두 세팅하여 기본 동작을 시도해 보았습니다.부품 상자를 정리해보니 이전에 구입해 놓은 nRF51822 구형 전부가 몇 개 눈에 띄었습니다.구형이라 BLE 4.x만 지원하는 걸로 구매만 해놓고 공부는 안 해서 쓰지도 못한 거였어요.요즘 이것저것 정보를 찾다보니 얘도 한번 시험을 해보기로 했어요.얘는 깊게 쓰는 놈이 아니라 단순히 Arduino 기반으로 작업을 해보기로 했어요.일단 오래된 모델이기 때문에 SES에서는 SDK로부터의 지원이 없고, IAR이나 KEIL, GCC로만 되어 있네요.

시험용 보드는 WaveShare의 보드입니다.Arduino는 아래 사이트의 것을 사용했습니다.

sandeepmistry – Overview Software Imagineer. 그리고 deepmistry에는 184개의 저장소가 있습니다. GitHub.github.com 의 코드에 따라주세요

sandeepmistry – Overview Software Imagineer. 그리고 deepmistry에는 184개의 저장소가 있습니다. GitHub.github.com 의 코드에 따라주세요

Arduino-nRF5와 arduino-BLEperipheral을 설치하면 됩니다.디버거는 제이링크를 사용하기로 했어요 ST-Link도 된다고 하던데 저같은 경우 동작이 잘 안되요.아두이노 설치는 매번 하던대로 하시면 됩니다.우선 보드매니저님께 URL을 등록합니다

検出された言語がありません。

入力言語を確認してください。

検出された言語がありません。

入力言語を確認してください。

보드 매니저부터 설치해 주세요.

그리고 라이브러리를 설치해 줍니다.

sandeepmistry/arduino-BLE Peripheral Nordic Semiconductor의 nRF8001 또는 nR51822로 커스텀 BLE 주변기기를 만드는 Arduino 라이브러리 – sandeepmistry/arduino-BLEPeripheralgithub.comsandeepmistry/arduino-BLE Peripheral Nordic Semiconductor의 nRF8001 또는 nR51822로 커스텀 BLE 주변기기를 만드는 Arduino 라이브러리 – sandeepmistry/arduino-BLEPeripheralgithub.com이렇게 라이브러리가 설치됩니다관련 예시도 설치됩니다.보드의 설정은 상기와 같이 했습니다.J-Link와 모듈은 위를 참조하여 연결하면 됩니다.VCC——— VTref GND——— GNDSWDIO — SWDIOSWCLK — SWCLK 이렇게 연결해서 보드전원은 3.3V를 입력하시면 됩니다.VCC———– 3.3VGND——- GND Arduino를 사용하기 전에 노르딕의 경우 Soft device를 미리 저장해야 합니다.호환성 있는 다운로드 sn칩 상의 RF51822시스템 Bluetooth 낮은 에너지 및 2.4 GHz SoC NRF51822는 범용의 초저 전력SoC로, Bluetooth 낮은 에너지 및 2.4 GHz전용 무선 애플리케이션에 최적입니다.이는 256/128 KB의 플래시라 32/16 KB의 RAM을 갖춘32비트 ARM Cortex-M0 CPU을 중심으로 구축되고 있습니다.그… 그렇긴 www.nordicsemi.com여기서 S130 Soft Device와 nRF5 SDK를 다운받아서 적당한 위치로 풀어놓겠습니다.그리고 S130을 플러싱할 때는 nrf connect를 사용했습니다.nRF Connect for Desktopn(데스크탑용) RF Connect for Desktop은 개발 애플리케이션용 크로스 플랫폼 프레임워크입니다. Bluetooth Low Energy 및 LTE 링크 테스트, 전력 최적화, 프로그래밍 및 more.www.nordicsemi.com 애플리케이션이 포함되어 있습니다여기서 다운받아서 설치하시면 됩니다.실행을 하시면 위와 같이 동작을 하시고 여기서 programmer를 선택하시면 됩니다.처음에는 install 버튼이 있고 install 하면 됩니다. J-Link에 모듈을 물리고 전원을 켠 후 Programmer를 오픈합니다.Select device를 하고 접속합니다.오른쪽 Add HEX 파일을 이용하여 방금 다운로드 받은 S130을 불러옵니다.이 파일입니다.Erase & write를 눌러 플러싱합니다.Read를 해보면 정상적으로 휘었는지 확인할 수 있습니다.다음은 기본적인 블링킹 예를 작동시켜 주세요.P0.18과 P0.19에 LED를 붙였습니다.위와 같이 설정해서 구우면… 쳇, 오류가 나네요.찾아보니 일반 제이링크드라이버로는 동작하지 않는다고 하네요.. 에곤…Zadig-USB드라이버 설치를 간단히 하는 Zadig USB드라이버 설치를 간단히 하는 Zadig은 Windows응용 프로그램에서 WinUSB, libusb-win32/libusb0등의 일반적인 USB드라이버를 인스톨 합니다.sys또는 libusbK에서, USB디바이스로의 접근을 지원합니다.libusb기반의 애플리케이션을 사용하고 디바이스에 접속하고 싶은 경우에 특히 편리합니다.zadig.akeo.ie여기서 드라이버 변경 도구를 다운로드합니다.인스톨 파일이 아니기 때문에 부담은 없습니다^^Segger J-LInk 기본드라이버 인스톨시의 J-Link입니다.다운로드한 프로그램을 실행하고 Options –> List All Device 를 클릭합니다.Driver가 아래와 같이 되어 있는지 확인하고 Replace Driver를 누릅니다.그러면 드라이버를 Segger J-Link에서 Win USB로 바꿔줍니다.그럼 이렇게 바뀌고 있어요.그러면 디바이스 관리자에게도 이렇게 바뀌고 있습니다.다음에 아두이노에서 다운받으시면 정상적으로 다운받으실 수 있습니다.Arduino 환경에서 nRF51822 앱을 사용해 볼 수 있습니다.그리고 J-Link 드라이버가 이렇게 WinUSB 드랍비바로 바꾸면서 다른 것들이 이제는 작동을 안 하게 됩니다.원복시키는 방법입니다.장치 관리자에서 BULK interface의 오른쪽 마우스를 눌러 속성으로 들어갑니다.드라이버 롤백을 합니다.이유를 선택하면 “예” 버튼이 활성화됩니다.그러면 이렇게 다시 Segger J-Link로 바뀝니다.조금 번거로우시겠지만 Zadig.exe를 사용해서 바꿔서 롤백해서 원복하면 될 것 같아요. ST-Link도 된다는데 저는 오류가 나네요. ^^ 프롤로그예제를 보시면 Eddstone과 iBeacon 예제와 Serial 예제가 있습니다.예제 소스를 보시면 최소한의 간략화 버전이기 때문에 쉽게 확장할 수 있을 것 같습니다. nRF SDK 예제를 따르려면 허리가 빠질텐데… 일단 여기서부터 시도하고 확장하면 목적지에 도달하기 쉬울 거예요.기본 핀맵은 arduino-nRF5/variants 디렉토리를 참조하십시오.예제를 보시면 Eddstone과 iBeacon 예제와 Serial 예제가 있습니다.예제 소스를 보시면 최소한의 간략화 버전이기 때문에 쉽게 확장할 수 있을 것 같습니다. nRF SDK 예제를 따르려면 허리가 빠질텐데… 일단 여기서부터 시도하고 확장하면 목적지에 도달하기 쉬울 거예요.기본 핀맵은 arduino-nRF5/variants 디렉토리를 참조하십시오.내가 사용한 Waveshare BLE400모듈의 경우는, 상기대로입니다.arduino-nRF5/variants/Waveshare_BLE400/variant.h을 참조하세요.기본적으로 LED4개 버튼 2개, Analog5개, UART, SPI, I2C1개가 할당되어 있군요.Timer와 PWM은 어떻게 되는지 모르겠네요^^..현업 때는 사실 Arduino는 거의 보지 않았어요.뭔가 조금 없어보이고, 아마추어가 사용하는 느낌이 아닌 느낌이랄까??하지만 최근 아두이노를 사용하다 보니 그 인식이 많이 바뀌었습니다.아도우이노의 간결한 코드 스타일이 요즘은 너무 마음에 듭니다. nRF51822에 일련 동작시키고 보았습니다.이로써 제어가 시작된 것으로 이것 저것 대어 볼 수 있다고 생각합니다.물론 많은 사람이 관련되어 있으므로 혼란하고 있고, 라이브러리에 대한 검증도 못하지만 그렇다고 STM32CubeIDE와 Nordic SDK를 사용해도 크게는 태어나지 않습니다.ST및 Nordic SDK를 보면 알지만 실은 HAL Driver는 대개 되어 있지만 Device driver는 거의 없다고 봐야 합니다.결국 사용자가 HAL driver기준으로 Device driver포팅 해야 하는데, 외주 하고 검증의 개런티를 받으면 좋은데 자기가 해야 한다고 하면 끔찍한 상황이 발생합니다.주위를 보면 대부분 인터넷을 검색하고, 귀에 거슬리는 소스를 흘리며 포팅 하는 것이 현실이기 때문에 결국 검증이나 안정성은 자신의 역할이 되어 버립니다.나의 경우 스스로 이식하여 변경하고 포팅 할 시간이 이미 대부분의 Device driver가 포팅 되어 있는 Arduino환경에서 사용법과 소스의 안정성을 확인하는 데 시간을 쓰는 게 생산성이 높아지는 방법이라고 생각하게 되었습니다.각종 장치 드라이버를 포팅 하고 git HUB에 내준 오지라프 넓은(?:^.^)분들이 절대 나보다 능력이 떨어지는 것은 없을 것이며, 내가 한다고 그들보다 잘 소화할 자신도 전혀 없으니까요.그분들이 올린 소스를 보면서 전체의 흐름을 파악하고 만약 문제가 생겼을 때에 스스로 수정이 가능한 정도면 OK와 채용을 하는 것이 최근의 방법론이 되었습니다.순서는 바뀌었지만 다음엔 nRF52840과 nRF52832를 Arduino환경에서 사용하는 것을 종합합니다.어느 쪽이 좋다기보다 하나를 고르보다 힘들지 않니까 양쪽 다 하면서 작업하는 게 좋다 때문입니다.우아은다ー SDk구조를 이해하는 것은 사실 쉽지 않습니다.단순한 Arduino로 목표 기능과 똑같이 구현하고 길을 본 뒤 발다ー SDK에서 재구성하는 것이 땅에 발다ー SDK로 구성하는 것보다 빠른지도 모르기 때문입니다이것은 물론 나의 경우의 주관적인 뇌 피샤루은 아닙니다^^

error: Content is protected !!