교육용으로 만든 자료를 정리한 것이다. IntelliJ Community Edition 은 무료지만, JAVA EE 지원이 되지 않습니다. 하지만, Smart Tomcat 이라는 플러그인을 설치하면 간단한 서블릿 웹 앱 프로젝트에 한해서 실행 및 디버깅을 진행할 수 있습니다. (1) Gradle 프로젝트 생성 Gradle 프로젝트로 새 프로젝트를 생성합니다. (2) Smart Tomcat 플러그인 설치 상단 메뉴 File => Settings 에 들어가서 좌측 탭의 Plugins 를 선택합니다. 그 뒤에 Smart Tomcat 을 검색하여 설치합니다. (3) build.gradle 편집 build.gradle 파일 상단에 (repositories 블럭 밑) 아래와 같이 입력해줍니다. sourceSets ..
(사진 출처: https://www.blueair.com/ 블루에어 공식 페이지) 내가 일하는 사무실에서 약 5년간 공기 청정을 담당하다가 얼마 전 집으로 오게 된 구형 공기청정기 블루에어 Pure211. 이 녀석을 구글 홈에 붙여서 음성으로 컨트롤하거나 원하는 시간에 꺼지거나 켜지게 할 수 있도록 인터넷을 연결해 보았다. 1. 기기 분석 - 개조 가능한지 살펴보기 첫 번째 할 일은 공기청정기를 분해해서 개조가 가능한지 살펴보는 것이다. 내가 생각했던 제일 좋은 개조 방법은 스위치 케이블을 ESP8266(아두이노를 탑재한) 에 연결하고, 다시 아두이노에서 공기청정기로 스위치 신호를 보내는 방법이다. 그렇게 되려면 구조가 간단해야 하는데... 기판을 분해해서 스위치 쪽 케이블 커넥터를 살펴보니 친절하게 설..
가끔씩 필요에 의해서 만드는 IOT 기기 프로젝트를 진행하면 제일 고민스럽고 귀찮은 것 중에 하나가 WiFi 연결과 서버 연결 설정을 만드는 부분이다. 이 프로젝트를 완성하기 전에는 소스코드 내에 하드코딩으로 무선 AP 의 SSID와 패스워드를 삽입해 버리거나 웹 서버를 동작시켜서 GET 파라미터 값으로 SSID 와 패스워드 그리고 mqtt 서버 주소를 입력하는 방법을 사용해왔다. 하지만, 최종 연결 상태를 확인하거나 추가 옵션을 붙이기가 만만치 않고, 중구난방으로 생겨나는 자작 IOT 기기들의 설정 방법들이 일관되지 않아서 유지 보수가 어렵다는 단점이 있었다. 그래서 일관된 방법으로 설정값을 넣기 위한 웹 설정 마법사 모듈을 단순하게 만들어봤다. 소스코드 및 사용방법: https://github.com..
참조 추가 => COM 에서 다음 항목들을 추가한다. 이후 아래의 코드를 사용하면 끝. 다만, 보안 문제가 있는 형식은 예외를 발생시키는데 이를 강제로 열 수 있는 방법을 찾아야한다. public static void WordToPDF(string docPath, string exportPath) { Microsoft.Office.Interop.Word.Document wordDocument; Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application(); // 경로, 파일 변환 대화상자 표시 안 함, 읽기 전용으로 열기 wordDocument = appWord.Documents.Open(..
예젠에 회사 블로그에 올렸던 글... 준비물 1. NodeMCU v2 WIFI 기능이 탑재된 가성비 좋은 마이크로 컨트롤러 보드입니다. 2. USB 와이어 LED 오픈마켓 등에서 'USB 와이어 LED' 로 검색하여 구입 가능합니다. 3. 브레드보드와 점퍼 케이블 납땜 없이 전자 회로를 구성하고 테스트 할 수 있습니다. 4. NPN 트렌지스터 - 2N2222 NodeMCU v2 소개 NodeMCU v2 에는 중국 에스프레시프 시스템사에서 개발된 wifi 기능이 탑재된 MCU, ESP8266-12E 모듈이 탑재되었습니다. 이 기기의 스펙을 간략하게 적어보면 다음과 같습니다. - 802.11 b/g/n 프로토콜 - Wi-Fi Direct (P2P), soft-AP - TCP/IP 프로토콜 - 80Mhz 클럭..
27인치 4K 해상도의 모니터로 이클립스를 열었을 때 조금 당황스러웠었다. 눈을 모니터에 가까이 가져가야 보일 정도의 작은 아이콘과 패키지 익스플로어의 깨알 같은 폰트들이 보였기 때문이다. 이런 경우 eclipse 디렉토리에 있는 eclipse.ini 파일을 열어서 가장 마지막 줄에 아래의 옵션을 추가해주면 된다. -Dswt.enable.autoScale=true -Dswt.autoScale=200 -Dswt.autoScale.method=nearest
둘째날이 밝았습니다.이 날은 전 날 내린 눈이 많이 쌓여서 눈사태 위험이 있었기 때문에 스키장 측에서 눈 폭파 작업후 2시간 늦게 오픈을 한다는 통지를 해왔다고 합니다.덕분에 잠을 더 자고 천천히 출발할 수 있었습니다. 베이스 위에 올라가니 산 위에 걸려있던 구름은 더 아래쪽으로 내려가고 (도시는 흐렸습니다) 쨍한 하늘 아래 장엄한 산봉우리와 가슴 설레게 하는 광활한 슬로프가 눈에 들어왔습니다. 심장터질뻔... 2860m 중간 정상에 올라왔습니다. 중간 정상 슬로프 모습. 토요일 오전이었는데도 불구하고 사람 없는 넓은 슬로프가 너무 마음에 들었습니다.정설은 되었지만 아직 파우더 설질을 유지하고 있어서 라이딩하기에도 좋았었어요. 저 멀리 산보다 낮게 깔린 구름이 보이네요. 구름 아래에는 알마티 시내가 감춰..
저는 규모는 크지는 않지만, 나름 복지가 괜찮은 회사에 다니고 있습니다. 직원들을 위한 복지중에 하나가 1년에 한 번씩 해외 워크샵을 보내주는 것이며, 사내 직원들과 팀을 짜서 원하는 장소로 갈 수 있습니다. 여행지에서 신나게 먹고 마시며 즐길수도 있고,함께 3박 4일 이상씩 붙어 다니기 때문에 업무에 관련된 이야기를 심도 있게 나눌 수 있는 시간이기도 합니다.더 좋은 점은 결혼한 분들은 3년에 한 번씩 부부 동반으로 다녀올 수 있도록 비용을 지원해 줍니다. 사내 동료 직원들 중에 저와 같이 스노보드를 즐기는 분들과 함께 팀을 짜서 카자흐스탄 알마티에 있는 침블락 (Symbulak) 스키장을 을 다녀오게 되었습니다. 결론부터 이야기 하면 강추입니다. 끝내주는 경치와 3월 초에도 즐길 수 있는 최고의 설질..
JAVA 에서 특정 URL 경로로 데이터를 가져오기 위하여 URL Encoding 을 해야할 때 여간 귀찮은 것이 아니다.그래서 아래처럼 URLEncoder 클래스를 수정한 BorwerURLEncoder 를 만들었다. 사용법은 URLEncoder 와 동일하며, 마치 브라우저 창에서 URL 주소를 입력해 놓은 것처럼 출력되도록 하였다. BrowserURLEncoder.java import java.io.CharArrayWriter; import java.io.UnsupportedEncodingException; import java.net.URL; import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; imp..
대략 두어 달 전..자전거에 나의 Nexus 6P 를 매달고 빠른 속도로 내리막을 내지르다가 갑자기 튀어나온 요철에 급브레이크를 잡게 되었다.덕분에 넥서스 6p 는 관성에 의해 총알처럼 튀어나갔고 아스팔트 바닥에 서너 바퀴 구른 뒤에 아래 사진과 같은 꼴을 하게 되었다. 다행히도 화면도 잘 나오고 기능 만큼은 정상적으로 동작하지만, 친구나 회사 사람이나 누구나 할 것 없이 모두 이렇게 한마디씩 했다."핸드폰은 언제 바꿀거에요?" 아직 바꾼지 1년도 안 되었는데... ㅜ_ㅜ 수리점을 찾았으나 나의 Nexus 6p 꼬락서니를 보고 고개를 절레절레 흔드는 분이 있는가 하면, 정말로 휴대폰을 바꿀까 고민하게 만드는 많은 수리비용 덕분에 부품을 직접 구입하여 자가 수리하기로 하였다.이왕이면 배터리도 새것으로 교체..
지금으로부터 3개월 전에 들여온 나의 애마 올뉴 말리부 1.5T의 주행 거리가 벌써 5000Km 가까이 되었다. 나의 애마는 다른 사람 손에 맡기는 것보다 사랑 넘치는 손길로 직접 관리해주는 것이 좋을 것 같아서 직접 엔진 오일을 교체하기로 한다. 우선 엔진 오일 교체 방법에 대하여 동영상 강좌도 보고 글도 빡쎄게 읽은 다음에 부공 모터스 셀프 정비소에 직접 방문하였다. 이곳에서 리프트를 사용할 수 있으며 이용 비용은 한 시간에 1만 원으로 나쁘지 않다. 내 손으로 엔진 오일을 직접 교환하는 첫 경험이라 긴장감이 올라왔지만 표정만은 마치 이미 전문가인 것처럼 여유로운 미소를 보이며 띄우며 미심쩍은 눈길을 보내는 직원들이 내미는 서류에 싸인하였다. 그 다음 본격적인 작업을 시작할 수 있었다. 먼저 엔진 아..
JAVA6 부터 자바 스크립트 엔진을 기본적으로 지원한다. (ps, 안드로이드에서는 자바 스크립트 엔진이 직접 포함되지 않는다. 그렇기 때문에 RhinoScriptEngine 프로젝트를 직접 적용해야 한다. https://github.com/mozilla/rhino) JAVA8 미만은 RhinoScriptEngine 을 사용하며, 8 버전에서는 NashornScriptEngine 을 사용한다. 하지만 사용방법은 동일하다. 물론 각 브라우저에서 사용할 수 있는 자바 스크립트 API 는 제공되지 않는다. 아래 예제는 콘솔을 통하여 두 수를 입력 받아 각각 함수와 객체를 이용하여 덧셈을 하고 그 결과 값을 출력해 주는 코드다. test.js : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ..
세 줄 요약. 1. JAVA 의 String 클래스는 유니코드로 처리되는 char 의 배열 이외에 어떠한 인코딩 정보를 갖고 있지 않는다. 2. String.getByte('인코딩명') 을 사용하여 인코딩 할 수 있으며, new String(byte[], "인코딩명") 을 사용하여 디코딩 할 수 있다/.3. EUC-KR 에서 UTF-8 으로 바꾸기 위해서는 EUC-KR ---> java.lang.String ----> UTF-8 과 같은 방식으로 변환 할 수 있다. 기본적으로 자바의 String 클래스는 2 byte 크기의 유니코드를 사용하여 문자열을 처리하는 Character 배열을 감싸고 있는 형태이다. https://docs.oracle.com/javase/8/docs/api/java/lang/Ch..
넥서스5 액정을 교체해 보겠다.우선 부품을 구해야 하는데, 해외 직구로 구매하였다. 알리 익스프레스에서 구매하였는데, 주의할 점은 반드시 터치와 LCD 가 함께 붙어있는 모듈을 사야한다.접착제로 터치와 LCD 가 붙어있기 때문에 따로 분리하기가 매우 어렵다. 가격은 32달러부터 40달러까지 하는 것 같은데, 나는 33.99 달러에 구입하였다. 넥서스5 의 깨진 액정. 알리 익스프레스에서 구매한지 보름만에 도착하였다. 꼼꼼한 포장상태. 테이프를 뜯고 뚜껑을 열자 분해 조립에 필요한 간단한 도구 몇 개가 들어있다. 모든 구성물을 꺼낸 상태. 가장 왼쪽에 보이는 녀석은 하드 글라스 형태의 액정 보호필름. 나름 저렴한 가격에 풍부한 구성을 갖추고 있다. 왼쪽은 액정 깨진 넥서스5. 오른쪽은 교체될 터치 액정 패..
API 서버를 개발하다보면 아래와 같이 간단한 JSON 타입을 Response 값으로 반환해야 하는 경우가 종종 생긴다. { "success" : true, "id" : 1024, "items" : [0,7,9,12], "status": { "method" : "get", "code" : 202 } } 만약 위 값이 일회성이라고 가정할 때, GSON 같은 도구를 사용하기 위하여 객체로 만들거나 스트링을 사용해서 이어 붙이기에는 구현하기가 복잡하거나 귀찮아 지는 경우가 종종 발생한다. 그래서 이런 귀찮은 작업들을 간단하게 줄여주는 코드를 만들었고, 공유한다. JsonMaker.java 파일을 만들고 아래 주소에 있는 코드를 붙여넣기 하여 사용할 수 있다.https://gist.github.com/ice3x..
값비싼? FTDI 가 달려있는 아두이노나 짭두이노에 대한 설치 자료를 인터넷 검색을 통하여 쉽게 찾아볼 수 있지만, 최근 온라인 쇼핑몰에 심심치 않게 등장하는 초 저가형 짭두이노는 CH340 라는 USB 시리얼 변환 드라이브를 사용한다. (요즘 알리 익스프레스에 접속하면 자동으로 한글로 번역되어 나오는데, 차라리 영어가 낫다...) 특히 아두이노 나노와 호환되는 초 저렴한 짭두이노를 많이 찾아볼 수 있는데, 이 블로그 포스팅을 작성하고 있는 15.11.23 기준으로 가장 싼 녀석이 1.75 달러다. 현재 환율로 따져보면 초코파이 한박스보다 싼 가격으로 아두이노를 구입할 수 있다. 이렇게 다른 짭두이노보다 가격이 저렴한 이유는 FTDI 와 같은 비싼 드라이버 대신 CH340 (ch340g, ch341) 이..
이클립스로 작성된 다양한 프로젝트들을 의존하는 프로젝트를 생성하는 경우 인코딩 문제로 당황스러울 때가 종종 있다. 만약 여러개의 프로젝트내의 소스 파일들이 각각 다른 인코딩으로 저장되었을 경우 이 것을 한 번에 utf-8 로 바꾸는 방법에 대하여 알아볼 것이다. 1. 텍스트 파일 (혹은 java 파일) 의 인코딩 정보 가져오기 Text 파일 혹은 Java 소스 파일의 인코딩을 확인하는 방법은 여러가지가 있지만 가장 정확하면서 간단한 방법은 바로 juniversalchardet (https://code.google.com/p/juniversalchardet/) 라이브러리를 사용하는 것이다. (무식한? 방법으로는 파일을 읽어서 테스트 하려는 인코딩의 스트링으로 변환하고 character 배열을 받아 0xff..
프로젝트 코드 및 회로도는 아래 주소에서 확인하세요. https://github.com/ice3x2/Wifi_Humidifier 아두이노를 취미로 시작한지 1년이 지났다. 그 이후로 수집벽이 생겼는데, 센서나 부품을 쓰지도 않으면서 알리 익스프레스를 통하여 모으는 일이다 덕분에 책상 위에 온갖 센서들이 굴러다닌다. 초창기에 구입한 ESP8266 ESP-1 도 그 중에 하나인데, 사놓고 사용하지를 않아 아까워서 이번 프로젝트에 사용하게 되었다. 단, ESP8266은 80Mhz 와 메모리 32kbyte 의 뛰어난 성능을 갖고 있는데, 그 자체로 IOT 플랫폼으로 사용할 수 있다. 하지만 ESP-1은 최신 버전인 ESP-12 와 다르게 사용할 수 있는 GPIO 포트가 얼마 되지 않고 아날로그 입력을 받도록 처..
이전에 아두이노 IDE 1.0.x 버전 기준으로 Attiny85 부트로더 굽는 법과 삽질 경험에 대하여 포스팅(http://www.dev.re.kr/59) 했었는데, 아두이노 IDE 1.6.4 버전 이상과 그 안에 포함된 개개선된 ISP 코드 덕분에 이제는 부트로더 굽는 것이 더 쉬워졌다. 콘덴서나 저항을 reset 버튼 사이에 연결하거나 수정된 ISP 를 따로 구해서 사용할 필요가 없어졌다. 이번 시간에는 1.6.x 버전을 이용하여 간단하게 부트로더를 굽는 방법에 대하여 언급할까 한다. 이 포스팅은 Arduino UNO 기준으로 되어있다. 1. Attiny85 라이브러리 설치하기. 먼저 환경설정 메뉴에 들어가면 아래와 같은 화면이 나오는데, Additional Boards Manager URLs 의 텍..
1. DHT22 와 라이브러리 구하기 내가 자주 이용하는 알리 익스프레스에서 3달러 라는 저렴한 가격에 판매되고 있다. 국내 쇼핑몰에서도 많이 판매되고 있다. github 에 공개된 오픈소스 라이브러리를 다운 받아서 압축을 풀고 아두이노 프로젝트 폴더 내의 라이브러리 폴더에 붙여 넣는다. DHT22 라이브러리 : https://github.com/nethoncho/Arduino-DHT22 예제코드 : https://github.com/nethoncho/Arduino-DHT22/blob/master/examples/Serial/Serial.ino 예제코드를 보면 매우 간단한 사용법을 확인할 수 있다. 예제코드 실행 결과. 2초에 한 번씩 온도와 습도를 불러온다. 2. DHT22 를 활용한 인터넷 온도/습도..
이번 포스팅에서는 ENC28J60 를 이용하여 아두이노를 웹서버로 만들어 보겠다. 아두이노 모델중에 가장 많이 사용되는 UNO 에 탑재된 ATmega328의 2kbyte 라는 개미 코딱지 같은 메모리를 활용하여 그럴싸한 html 문서를 보여주는 웹 서버를 만드는 것은 쉽지 않은 일이다. 응용 소프트웨어 서버로 사용하기에는 조악한 성능을 갖고 있다. 그 때문에, 아두이노를 웹 서버로 사용하게 된다면 센서를 통하여 데이터를 수집하고 REST로 값을 전달해 주는 기능이나 물리적 장치 제어를 위한 컨트롤러 이상으로 확장하기는 어려울 것이다 . 하지만 이번 포스팅에서는 아두이노를 웹서버로 만들어 재미있는 것들을 만들어보고자 한다. (조만간 안 귀찮을 때 WIFI 사용도 같이 다뤄보고자 한다. ) 1. 이더넷 모듈..
// SDK 22 기준.view.setDrawingCacheEnabled(true);// 임의로 measure 와 layout 을 호출한다. //view.measure(View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY), // View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.EXACTLY)); view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIF..
TDD 코드를 작성하는데, Private 메소드는 아주 귀찮은 존재입니다.잠시 public 으로 바꿔서 테스트 하거나 또는 리플렉션을 사용하여 실행 시키는 방법등이 있는데, 여러가지로 피곤함을 가중시켜요. 그러나 이런 문제를 해결하기 위한 PowerMock 과 같은 도구가 있습니다!! https://code.google.com/p/powermock/ 하지만, Android 테스트에서 Robolectric 과 Mockito 를 사용하는데, 여기다가 PowerMock 까지 붙이면 Exception 을 뿜으며 문제가 생기네요.(혹시 문제 해결책을 아시는 분 있으면 알려주십쇼..ㅠㅠ) 어쨌든 위와 같은 문제를 해결 하느라 약간의 삽질을 하다가, 허접하게 나마 아래와 같이 좀 더 편하게 private 메소드를 실..
이 슬라이드를 보고 암이 치료되었습니다... 위 슬라이드 내용을 아래와 같이 정리해 봤다. Base :: Objects.equal(), Objects.hashCode(), MoreObjectes.toStringHelper(), ComparisonChain.compare() public class Employee implements Comparable{ public String name; public Integer age; public Job job; @Override public boolean equals(Object o) { if(!(o instanceof Employee)) return false; Employee that = (Employee)o; return Objects.equal(name, t..
Application 클래스 내부 메소드인 registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks) 를 이용해야 한다. 이 메소드의 인자값으로 ActivityLifecycleCallbacks 를 상속받아 구현한 클래스의 인스턴스를 넣어준다. 또는 다른 Activity 나 Service 내부에서 getApplication(). registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks { ... }) 와 같이 호출해 주는 방법도 있다. registerActivityLifecycleCallbacks 을 더이상 사용하지 않을때는 unregisterActivityLifecycleCallbacks(A..
사실 앱 위변조 방지는 프로가드만 잘 적용하면 어느정도 방지할 수 있다. 하지만, 클라이언트 앱을 역컴파일 한다면 서버 API 가 노출되는 것을 쉽게 막을수도 없는일이다. 사실 이 문제에 대하여 당장 떠오르는 해결책은 NDK 를 사용하여 서버와 통신하는 것이다. 하지만 서버의 모든 API 호출을 C/C++ 로 구현하기에는 시간적 인적 비용이 부족한 많은 프로젝트에서는 거의 불가능에 가깝지 않을까 생각한다. 그래서 시간이 없는 상황에서는 다음과 같이 간단한 방법을 이용할 것을 권장한다. 코드상에서 서명 값을 가져와서 서버와 첫 접속시 이 값을 보내준다. 서버에는 앱의 서명 값이 이미 저장되어 있으며 이 것을 클라이언트로부터 받은 서명값과 비교하여 위변조된 앱인지 검출하는 것이다. 즉, 앱 빌드시 다른 인증..
앱의 위변조를 방지하기 위하여 서명 값을 가져와서 서버에 미리 등록된 값과 비교하는 과정이 필요하다.하지만, 안드로이드 Java 코드상으로 제공되는 API 를 활용하는 것은 안전하지 못하다.(안드로이드 자바 코드상에서 서명 값 가져오기 : http://www.dev.re.kr/70) 그렇기 때문에 JNI 를 활용해야 한다. context 를 인자값으로 받아서 jni 에서 제공되는 리플렉션을 사용하여 SHA1 으로 변환된 서명 값을 가져오는 코드를 첨부한다. 주의할 점은 아래 코드는 C++ 로 작성되었기 때문에 C 에서 사용하려면 약간의 수정이 필요하다. 이를테면 env->GetObjectClass(context); 를 C로 표현 하려면 (*env)->GetObjectClass(env, context); ..
우선 안드로이드 APK 파일은 JAR 와 호환되는 형태로 되어있다. 즉, 코드를 빌드를 하여 나오는 APK 파일은 zip 포맷과 유사한 jar 와도 비슷하다. 특히 서명에 대한 방식은 JAR 와 APK 와 매우 비슷하다. 실제로 서명을 사용해 빌드된 APK 파일 확장명을 zip 으로 변경하고 압축을 풀어보면 META-INF 디렉토리 내부에 이와 관련한 파일이 생성된 것을 볼 수 있다. 이 파일은 MANIFEST.MF, CERT.SF, CERT.RSA 파일이다. MANIFEST.MF 파일은 텍스트로 되어있으며 META-INF 디렉토리 내부의 파일을 제외한 APK 패키지 내부 모든 파일(Entry)에 대한 리스트를 보여준다. 각 리스트의 항목에는 파일 경로와 각 파일의 SHA1 해쉬 값(파일을 읽어서 만든다..
APK 파일의 압축을 풀면 classes.dex 파일과 그리고 String 과 drawable 과 같은 리소스 맵핑 정보를 담고 있는 resources.arsc 파일등과 AndroidManifest.xml 파일 외에 res 폴더 내에 여러 XML 파일등이 존재한다. 하지만 이 XML 파일은 우리가 흔히 아는 형식으로 되어있지 않다. 왜 APK 파일 내부에 있는 AndroidManifast.xml 을 비롯한 XML 파일들은 우리가 알고 있는 XML 형식이 아닌걸까? 아마도 공간을 정약하고 런타임 환경에서 빨리 리소스 정보를 읽어들일 수 있도록 바이너리 타입으로 만들었을 것이다. 안드로이드에서 사용하는 바이너리 타입의 XML 포맷에 대하여 아래 사이트에서 자세하게 설명하고 있다. https://justana..
- Total
- Today
- Yesterday
- 블루투스
- 아두이노
- 침블락
- Iot
- 가습기
- noidemcu
- oled
- activity
- NeoPixel
- HC-06
- 개발
- ndk
- ENC28J60
- WS2812B
- ESP8266
- ATtiny85
- Cheapduino
- bluetooth
- 스마트 무드등
- 안드로이드
- Android
- 병렬 프로그래밍
- 안드로이드 개발
- 이더넷
- 부트로더
- 칩두이노
- Java
- arduino
- json
- 알리익스프레스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |