본문 바로가기

프로그래밍

모바일 앱 통계/관리 : Google Analytics 0. 모바일 앱 통계/관리 - 어떻게 본의아니게 기회가 생겨서 한번 조사를 하게 됨. - 조사해 본 김에 아주 개인적인 생각으로 정리해 봄. 1. Google Analytics에 대해 잘 정리된 블로그 - 웹 페이지 관련 설명을 한 블로그지만, 정리가 잘 되어있어서 링크. - Google Analytics에서 통계로 보여주는 화면이 같기 때문에 기능상의 차이는 없을 것으로 보임. 1) 구글 애널리틱스 설치부터 적용까지 (https://milooy.wordpress.com/2016/01/14/google-analtyics-1-intro/) 2) 이벤트, 그리고 GoogleTag Manager (https://milooy.wordpress.com/2016/01/14/google-analtyics-2-goog.. 더보기
Wifi모듈(ESP8266) 사용법(3) - arduino-ESP8266 라이브러리를 사용하여 연결 0. arduino-ESP8266 라이브러리 사용에 앞서서.. - 아두이노 라이브러리는 AT커맨드를 사용하게 쉽게 조합해 놓은 코드. - 따라서, AT커맨드를 알면 더 쉽게 사용할 수 있음. 1. arduino-ESP8266 라이브러리 다운로드. - 라이브러리 다운로드 후 Arduino/libraries 폴더에 저장 2. ESP8266과 아두이노 연결 및 입·출력 프로세스(SoftwareSerial) - 아두이노 UNO는 하드웨어와 통신하는 예약 Serial포트(D0, D1)만 있음. - 라이브러리 사용을 위해 SoftwareSerial을 사용하여 ESP8266과 통신. - ESP8266, 아두이노 연결: AT커맨드 사용을 위한 연결에서 RX, TX만 변경 ESP8266 아두이노 RX SoftwareSe.. 더보기
Wifi모듈(ESP8266) 사용법(2) - AT커맨드 사용하여 와이파이에 접근 0. AT커맨드 사용에 앞서서.. - ESP8266는 AP, Station 모드 둘다 사용 가능. - 하지만, 여기서는 Station 모드로 사용하는 방법만 다룸. 1. AT커맨드를 사용하여 확인할 수 있는 것들 - 펌웨어 업데이트가 성공적인지 확인. - ESP8266이 제공하는 기능들에 대해 어떤식으로 이루어지는지 확인. - ESP8266이 멀쩡하게 살아있는지 확인. - 아두이노 IDE를 쓰다가 작동이 이상한 경우 코드가 잘못인지 ESP8266이 잘못인지 확인. 2. ESP8266과 아두이노 연결 및 입·출력 프로세스(Serial Monitor) - ESP8266, 아두이노 연결: 펌웨어 업데이트 연결에서 GPIO0와 연결한 선만 제거.ESP8266 아두이노 RX RX TX TX VCC 3.3V CH_.. 더보기
Wifi모듈(ESP8266) 사용법(1) - 펌웨어 업데이트 하기(MAC) 0. 업데이트에 앞서서.. - ESP8266는 3.3V를 사용하나 아두이노 보드의 TX, RX는 5V - 따라서, ESP8266이 고장날 수 있으나 진행결과 3개의 모듈 정상작동(운이 좋았을지도) - 가장 좋은 방법은 저항을 통해 5V → 3.3V로 만들어서 진행하는 방법. - 하지만 저는 그냥 진행. 1. 왜 업데이트를 해야 할까? - 아두이노와 연결해서 사용하기 위해 필요한 SoftwareSerial이 지원하는 최대 보드레이트: 19200 - ESP8266의 기본 보드레이트: 115500 - 사용하기 위해서는 ESP8266의 보드레이트를 낮춰야 함. 이를 위한 펌웨어를 업데이트. - 여기 설명하는 방법대로 업데이트를 완료 하면 9600 보드레이트로 변경. 2. ESP8266 설명 및 ESP8266과 .. 더보기
iOS 키보드 숨기는 방법 1. resignFirstResponder 사용 - textView에서 직접적으로 사용해야 함 //사용법 [textView resignFirstResponder]; 2. endEditing:(BOOL)force 사용 - textView를 포함하는 뷰에서 사용하여도 하위 뷰들의 키보드 처리를 알아서 해줌 - 매개변수는 optionally한 값으로 강제 처리에 관련된 값이다. - (void)viewDidLoad { [super viewDidLoad]; [self.view setBackgroundColor:[UIColor grayColor]]; UITextView *txtView = [[UITextView alloc] initWithFrame:CGRectMake(100.0f, 100.0f, 100.0f, 30.. 더보기
GCD(Grand Central Dispatch) 사용 GCD : Grand Central Dispatch - iOS 4부터 지원하는 스레드 관리 기술 - 블록 코딩 기반으로 NSThread, NSOperation보다 쉽게 사용 가능 GCD Queue - 실행할 작업을 저장하는 큐로 작업을 정의하고 큐에 넣으면 나머지는 OS에서 알아서 처리 - 블록의 경량화 된 리스트라고 생각하면 됨 - Dispatch Queue 1) 시리얼 디스패치 큐(Serial Dispatch Queue) * 한 스레드에서 하나의 작업 씩 순차처리(FIFO)하며 처리 외 작업들은 대기 * 호출 할 때 마다 스레드가 추가되므로 과도하게 호출 할 경우 성능에 문제가 생길 수 있음 2) 컨커런트 디스패치 큐(Concurrent Dispatch Queue) * 작업들을 순서와 상관없이 별도의.. 더보기
가변저항으로 servo모터 움직이기 준비물 - servo모터 1개 - 가변저항 1개 코드 #include Servo myServo; void setup() { myServo.attach(9); } void loop() { int val = analogRead(A0); int rad = map(val, 0, 1023, 0, 179); myServo.write(rad); delay(15); } 영상 알게된 점 - 가변저항(potentiometer) 1) VCC(5V)와 GND의 방향은 상관 없음, 가운데는 analog 출력 2) 가변저항을 돌릴 때 마다 저항 크기가 바뀌고 그에 따라 전류가 변경 3) 1번이 VCC(5V)이고 3번이 GND여서 1번에서 3번으로 전류가 흐르는 경우(하단 그림 참고) 0] 전류가 저항을 더 많이 지날 수록 전류는.. 더보기
servo모터 자동으로 움직이기 준비물 - servo모터 1개 코드 #include Servo myServo; void setup() { //servo pinnumber attach myServo.attach(9); } void loop() { for (int i = 0 ; i < 180 ; i++) { //servo angle setting myServo.write(i); delay(15); // 꼭 delay를 사용하여 각도를 변경할 시간을 줘야 함 } myServo.write(0); delay(1000); } 영상 알게된 점 - servo모터 관련 1) 갈색: GND 빨간색: VCC(5V) 주황색: digital핀 2) servo.attach(digitPinNum) 함수를 사용하여 핀 설정 3) servo.write(angle) .. 더보기
버튼스위치로 숫자 변경하기 준비물 - 7segment 1개 - 버튼스위치 2개 - 10㏀ 저항 2개 - 220Ω 저항 1개 코드 int digit = 0; byte digits[10][7] = { {1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 0}, {1, 1, 0, 1, 1, 0, 1}, {1, 1, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 0, 1, 1}, {1, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 1, 1}, }; const int minusButtonPin = 2; const int plusButtonPin = 3; void setup(.. 더보기
카운터 만들기 준비물 - 7segment 1개 - 220Ω 저항 1개 코드 //카운터 출력을 위한 값 byte digits[10][7] = { {1, 1, 1, 1, 1, 1, 0}, //0 {0, 1, 1, 0, 0, 0, 0}, //1 {1, 1, 0, 1, 1, 0, 1}, //2 {1, 1, 1, 1, 0, 0, 1}, //3 {0, 1, 1, 0, 0, 1, 1}, //4 {1, 0, 1, 1, 0, 1, 1}, //5 {0, 0, 1, 1, 1, 1, 1}, //6 {1, 1, 1, 0, 0, 0, 0}, //7 {1, 1, 1, 1, 1, 1, 1}, //8 {1, 1, 1, 0, 0, 1, 1} //9 }; void setup() { //핀모드 설정 for (int i = 2 ; i < 10 ; i++).. 더보기