NRF51822 아르디노

최근 BLE관련 공부를 시작했습니다.최근 Maker활동에서 제작하는 Mbedded장치는 Connectivity가 매우 중요합니다.디바이스 단독으로 동작하기보다는 복수의 디바이스나 서버, 또는 클라우드와 연동하여 사용합니다.그래서 외부와 인터페이스하는 미디어가 필요합니다.고전적인 통신 방법인 RS-232C, RS-485는 물론 유선 LAN까지 유선은 이제 찬밥 상태가 되었습니다.요즘은 인기가 무선 통신입니다.무선 통신에는 Wi-Fi, BT clasic, 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구형 모두 몇가지 눈에 띄었죠.구형이므로 BLE4.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 구형 모두 몇 개 눈에 띄었습니다.구형이라 BLE4.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을 설치하십시오.디버거는 J-Link를 사용하기로 했어요. 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 —–VTrefGND —–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 file을 이용하여 방금 다운로드한 S130을 읽습니다.이 파일입니다.Erase & write를 눌러 플러싱합니다.Read를 해보시면 정상적으로 구부러져 있는지 확인하실 수 있습니다.그런 다음 기본 블링킹 예를 작동시키십시오.P0.18과 P0.19에 LED를 달아주었습니다.위와 같이 설정해서 구우면… 초프엘라 나오네요.찾아보니 일반 J-Link 드라이버로는 작동하지 않는다고 합니다..에곤……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에서 WinUSB로 전환합니다.자, 이렇게 바뀌고 있어요.그러면 장치 관리자에게도 이렇게 바뀌고 있습니다.다음에서 아두이노에서 다운받으시면 정상적으로 다운 받으실 수 있습니다.Arduino 환경에서 nRF51822 앱을 테스트 할 수 있습니다.그리고 J-Link 드라이버가 이렇게 WinUSB 도라비바로 바꿔 버려서 다른 것들이 작동하지 않게 됩니다.원복시키는 방법입니다.장치 관리자에서 BULK Interface 오른쪽 마우스를 눌러 속성으로 들어갑니다.드라이버 롤백을 합니다.이유를 선택하면 “예” 버튼이 활성화됩니다.그러면 이렇게 Segger J-Link로 바뀝니다.조금 번거롭긴 하지만, Zadig.exe를 사용해서 바꿔서 롤백해서 원복하면 될 것 같아요. ST-Link도 할 수 있다는데 저는 엘라가 나오네요. ^^ 프롤로그예를 보면 에드 스톤과 iBeacon의 예와 Serial의 예가 있습니다.그 소스를 보면 최소한의 간략화 버전이라 쉽게 확장합니다. nRF SDK의 예로 따라가자니 허리가 빠지는데… 그렇긴한번 여기에서 시험하면서 확장하면 목적지에 도달이 용이하게 된다고 생각합니다.기본 핀 맵은 arduino-nRF5/variants디렉토리를 참조하세요.예시를 보면 에드스톤과 iBeacon의 예와 Serial의 예가 있습니다.예의 소스를 보면 최소한의 간략화 버전이기 때문에 쉽게 확장할 수 있을 것 같습니다. nRFSDK의 예를 따라가다 보면 허리가 빠지는데… 일단 여기서부터 시도해 가면서 확장하면 목적지 도달이 쉬워질 거예요.기본 핀맵은 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가 포팅 되어 있어 도우이노 환경에서 사용법과 소스 안정성을 확인하는 데 시간을 쓰는 게 생산성이 높아지는 방법이라고 생각하게 되었습니다.각종 장치 드라이버 포팅 하고 gitHUB에 올리셔서 아저씨 로브 넓은(?:^.^)여러분이 절대 나보다 능력이 떨어지지는 않으시겠죠, 내가 했다고 그들보다 잘할 자신도 전혀 없으니까요.그 분들이 올린 소스를 보면서 전체의 흐름을 파악하고 만약 문제가 생겼을 때에 스스로 수정이 가능한 정도면 OK와 채용할 최근의 방법론이 되었습니다.순서가 바뀌었지만 다음엔 nRF52840과 nRF52832를 Arduino환경에서 사용하는 것을 정리하여 봅니다.어느 것이 좋다기보다 하나를 갈 것도 그리 힘들지 않으니 둘 다 하고 보면서 작업하는 것이 좋다고 생각하기 때문입니다.벤더 SDk구조를 이해하기는 쉽지 않습니다.단순한 Arduino로 목표 기능에 필적하게 구현하고 길을 본 뒤 발다ー SDK로 재구성하는 것이 땅에 발다ー SDK로 구성하는 것보다 빠른지도 모르기 때문입니다이것은 물론 나의 경우의 주관적인 뇌 피샤루은 아닙니다.^^

error: Content is protected !!