본문 바로가기

프로젝트

(61)
C#에서 MQTT프로그램 만들기 프로젝트 -> NuGet 패키지 관리 -> M2Mqtt 설치해야 함 예제 소스 using System; using System.Drawing; using System.Text; using System.Windows.Forms; using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; namespace MQTT { public partial class Form1 : Form { MqttClient client; string clientId; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string ..
Wemos D1, R1 (mini) 에서 MQTT 구현하기 PubSubClient 라이브러리를 설치한다. ( 라이브러리 관리에서 검색하면 나온다) MQTT사용을 위한 기본 베이스( 라이브러리 예제에 있음) #include // Wemos 사용 #include // MQTT const char* ssid = "........"; // WIFI 이름 const char* password = "..........."; // WIFI 비밀번호 const char* mqtt_server = "broker.mqtt-dashboard.com"; //무료 broker 서버중 하나 WiFiClient espClient; PubSubClient client(espClient); unsigned long lastMsg = 0; #define MSG_BUFFER_SIZE (50) c..
MQTT 다중 연결 MQTT를 이용 하여 PC , 아두이노 , 휴대폰으로 연결하기 위치에 상관 없이 인터넷으로 모든 기기를 연결하고 통신 하는 프로젝트 직접 기기간 통신은 각각의 IP가 필요하다. 그런데 WIFI에 연결시 마다 IP가 달라진다. 그때마다 IP주소를 수정 하기란 ㅠㅠㅠㅠ 반면 위 그림처럼 모든 기기가 고정된 한 곳에 접속 한다면.....엄청 간편해 진다. 다만 고정 IP유지를 위한 비용이 발생한다. 다행이 무료로 서버를 이용 할 수 있는 곳이 있다. broker.mqtt-dashboard.com 이를 이용 하여 프로젝트를 만들었다. C#으로 PC 프로그램을 하나 만들고 앱인벤트로 앱을 하나 만들었다. 앱스토어에서 MQTT사용하는 전용앱을 하나 다운 받았다.( 여러 종류가 있음 ) 아두이노는 Wemos D1 m..
다중 디스플레이, 수학좌표 기능추가와 사용법이 간편해진 완전 개선판 다중 디스플레이 지원( Display 생성부분이 완전이 새로워짐) 다중 디스플레이를 위한 블루투스 연결은 하드웨어 시리얼과 소프트웨어 시리얼이 있음 Display Class는 모두 지원하고 생성자도 함수 오버레이로 동일한 형태임 기존 #define문은 사라지고 생성시 바로 시리얼 주소을 넘겨주면 됨 #include // 소프트웨어 시리얼 사용시만 SoftwareSerial Soft(A1, A0); //( Rx, Tx ) Display hp( &Serial ); // 하드웨어 시리얼의 주소를 넘겨준다 ( Mega는 4개까지 사용가능 ) Display sp( &Soft ); // 소프트웨어 시리얼 주소를 넘겨준다 hp.begin( 115200 ) sp.begin( 115200 ); // 소프트웨어 시리얼은 ..
echo()사용 위치에 따른 그래픽 속도와 표현 차이 동영상으로 확인하기 https://youtu.be/_z0arpxSNXY 아두이노 소스 1 #define _BT Serial #include "D:\\myHeader\\Display.H" Display hp; int cx,cy; void setup() { hp.begin(); hp.echo(); hp.clear(); cx=hp.width()/2; cy=hp.height()/2; } void loop() { hp.color(White); for( int r=0; r
기능 개선판 아두이노 Bluetooth Display 기능개선판 동영상 보기 앱인벤트 Timer는 interval을 0으로 세팅해도 평균 50ms이상으로(관련 글로 이동) 반응한다. 블루투스 수신을 확인 하기 위하여 Timer를 사용 하므로 선 하나 점 하나 그리는 시간이 빨라도 50ms가 걸린다는 것이다. 그래서 느림.. 그러면 혹시........... 타이머 이벤트가 발생 하면 한번에 테이타를 전송 하면 어떨까? 스스로 실험을 해보면 알겠지만 Timer Event 루프를 빠져 나오기 전까지 아무것도 안 보인다. 왜냐면 Timer Event가 끝나야 Paint Event가 발생하는 데 캔버스에 그리는 속도 보다 아두이노에서 전송되는 데이타가 더 빨라 누적되어 루프를 빠져 나오지 못한다. 그래서 연구 한 결과 기존에 그리기 함수마다 있는 응답을 기다리는 w..
앱인벤트로 라이브러리에 대응하는 블럭 만들기. 소스파일 앱인벤터에서 불러오기로 사용함 apk파일 휴대폰에 앱 설치 파일 앱을 APK로 설치시 아두이노 예제를 실행하면 /storage/emulated/0/Android/data/appinventor.ai_사용자이름.Display/files/ 디렉토리가 생성된다. 실행전에는 디렉토리 없음 /storage/emulated/0/Android/data/appinventor.ai_사용자이름.Display/이후 하위 디렉토리에는 이 앱이 접근 가능하다. 필요한 데이터도 이곳에 작성 하면 된다.
휴대폰 디스플레이 라이브러리 클래스 완성된 휴대폰 디스플레이 라이브러리 클래스 메소드 begin() 블루투스 연결로 디스플에이 시작 wait() 명령 수행후 응답을 기다리며 대기( 그리기 함수에서 사용) 그래픽이 아두이노 속도 보다 느려서 명령수행 완료후 다음을 진행하기 위해 waitDisplayStart() 디스플레이가 준비 될 때 까지 기다림 clear() 화면을 지움 단, 배경 이미지는 유지 됨 color(unsigned long c) 그리기 색상 지정 4Byte Alpha R G B ARGB_COLOR.H참조 bkColor(unsigned long c) 배경색 지정 int width(); 화면 너비 화면이 가로 세로 바뀌면 값도 변경 int height(); 화면 높이 화면이 가로 세로 바뀌면 값도 변경 textSize( int s..
그래픽 시연 사용 휴대폰 LG G3 화면을 터치하면 메뉴 on / off 동여상 보기 클릭 아두이노 휴대폰을 디스플레이로 활용하기 아두이노 휴대폰을 디스플레이로 활용하기(2) 슬라이드 메뉴 Bluetooth Display 예제1 Bluetooth Display 예제2(조이스틱 사용) Bluetooth Display 예제3 원테두리에 다른 작은원 그리기 TFT LCD 출력과 비교하기 아두이노 소스 #define _BT Serial // 하드웨어 기본 시리얼을 블루투스로 사용 #include "D:\\myHeader\\Display.H" // 디스플레이 코어 클래스( 디스플레이 앱과 통신 하는 곳 ) #define _APK_ apk파일로 앱을 휴대폰에 추가 한 경우 #ifdef _APK_ #define LoadImg; ..
아두이노 연결 하고 통신 테스트 하기 메세지 길이 헤더 : C 1 Byte X좌표 2Byte Y좌표 2Byte 반지름 2Byte 채우기 1Byte( 0 , 1 ) 1 = true 아두이노에서 메세지를 넘겨주면 ( 블루투스) 앱에서 1Byte 텍스트받기 = 'C'이면 원그리기 데이타 받기 2Byte 숫자 받기 = X 2Byte 숫자 받기 = Y 2Byte 숫자받기 = R 1Byte 숫자받기 = bool 데이타 받기 완료 원그리기 동영상으로 보기 소스를 보면 일반 TFT LCD에 출력 하는 방식과 동일 하다. 아두이노 소스 #define _BT Serial // 블루투스 기본 시리얼 0,1번핀 사용 라이브러리 전에 선언 #include "D:\\myHeader\\Display.H" // 디스플레이 라이브러리 Display hp; // 디스플레이..
휴대폰을 무선 디스플레이로 활용하기 다중 모니터 가능 계속 코드가 업그레이드 됩니다. 시간순으로 글을 작성 하니 맨 아래쪽 글이 최신판입니다. 다운로드와 복사는 2번글 : ARGB_COLOR.H 복사 하세요 8번글 : Display.H 아두이노 예제소스 복사 앱인벤터 aia apk 다운로드 하세요 TFT LCD는 사용하기 불편하다. 중요 단점만 봐도 하드웨어에 따라 코딩이 달라진다.( 머리가 아픔 ) 핀을 많이 소모한다. ( Uno는 다른 곳에 사용 할 핀이 안 남아요) 한글 출력에 별도의 작업이 필요 하고 메모리도 많이 차지하고 느림 그래서 TFT LCD보다 훨씬 저렴한 중고 휴대폰을 디스플레이로 활용 하기로 한다. 집에 남아 있는 폰이나 테블릿을 활용 하면 될것이다. 구입해도 2~3만원이면 5인치이상 구함( 블루투스는 꼭 되야 함 ) 기존의 TFT LC..
Hangul_SD.H 를 이용한 한글 출력 ( 폰트파일 필요함 ) 한글 폰트파일과 인덱스 파일이 필요 합니다. 두 파일의 구조는 여기를 참고 Hangul_SD.H // HanGul.SD.H ver 1.0 아두이노용 한글 출력 클래스 // // 제작자 : 신 옥 진 // // 재배포 금지 링크를 사용 하세요. // // Index1 구조 ( 4 Byte Record ) [폰트offset : 4byte Long] // Index2 구조 ( 8 Byte Record ) [폰트코드 : 4byte Long][폰트offset : 4byte Long] // // Index2 사용시 소스코드에 #define _INDEX_2_ 코드 넣어야 함 // // // #define _TFTLCD_ myLcd // myLcd는 원하는 이름으로 하고 include 앞에 선언..
StreamReader.H SD카드 텍스트파일 라인읽기 메소드 StreamReader( 텍스트 파일 이름) SS핀은 10으로 자동 설정 Uno 자동 파일 open StreamReader( 텍스트 파일 이름 , SS핀 번호) Mega는 53 Uno는 10 자동 파일 open ReadLine() 한줄씩 파일을 읽어 온다 ReadLine( n ) n번쩨 줄로 이동하여 읽어 온다. ( 처음 줄 번호는 0임) open() close()후 다시 파일 사용시 첫라인부터 다시 시작 close() 파일을 닫음 endf() 파일의 끝이면 true 아니면 false StreamReader.H #ifndef _StreamReader_ #define _StreamReader_ #include #include class StreamReader { private : File _f; S..
Hangul_SD_Selected.H 를 이용한 한글 출력 Hangul_SD_Selected.H // Hangul_SD_Selected.H ver 1.0 아두이노용 한글 출력 클래스 // // 제작자 : 신 옥 진 // // 재배포는 금지, 그냥 링크를 사용 하세요. // // 영리목적( 유료 강의 자료, 판매 시스템에 포함 등 )의 사용은 사전 허락을 받아야 합니다. //// // // #define _TFTLCD_ myLcd // myLcd는 원하는 이름으로 하면 됨 // #include "c:\\Arduino\\Hangul_SD_Selected.H" // 헤더파일 전체 경로 // HanGul_TFT ht; // 한글출력 클래스 // #ifndef _Hangul_SD_Selected_ #define _Hangul_SD_Selected_..
Hangul_Directed.H 를 이용한 한글 출력 예제 동영상보기 Hangul_Directed.H // Hangul_Direct.H ver 1.0 아두이노용 한글 출력 클래스 // // 제작자 : 신 옥 진 // // 재배포는 금지, 그냥 링크를 사용 하세요. // // 영리목적( 유료 강의 자료, 판매 시스템에 포함 등 )의 사용은 사전 허락을 받아야 합니다. // // // #define _TFTLCD_ myLcd // myLcd는 원하는 이름으로 하면 됨 // #include "c:\\Arduino\\HanGul_Direct.H" // 헤더파일 전체 경로 // HanGul_TFT ht; // 한글출력 클래스 // #ifndef _Hangul_Direct_ #define _Hangul_Direct_ #include #inclu..
필요한 폰트를 메모리에 두지 말고 파일에 담아 사용하자. 필요한 폰트를 파일에 담아 사용하기 위해서는 아두이노 한글 폰트 Code 자동생성 프로그램 ver 2.0에 다음과 같은 폰트 파일을 추가로 생성하게 해야 한다. ( Font.utf ) 필드 1 필드2 36Byte 한글코드 4byte 폰트 (unsigned short 2byte ) *16 = 32byte 출력을 위하여 Hangul_Direct.H를 수정하여 Hangul_SelectSD.H를 제작 한다. 출력할 문자를 폰트파일의 한글코드와 비교하여 폰트를 찾는 것으로 수정 하면 된다. 기존 _memFont( long code) 를 _sdFont( long cod)로 수정 한다. 기존 함수 memFont( long code) bool HanGul_TFT::_memFont( long code ) { int si..
F연산자와 readLine 함수 사용하여 메모리 확보하기 코드 내부의 글자도 메모리를 잡아 먹는다. 그래서 F연산자로 플래쉬메모리(코드저장부분) 저장 하지만 그래도 한계가 있다. Uno의 경우는 더 심하다. 코드내에 글자수가 맘아지면 담을 수 있는 폰트도 많이 줄어 버린다. 이경우를 해결하기 위하여 코드안의 문장을 파일로 저장하고 출력 직전에 불러 오는 방식을 사용 하려고 한다. 문제는 문장을 쓰는 SD.prinln()은 있지만 문장을 읽어 오는 함수가 없어 엄청 불편 하다. 그래서 String readLine( File inf ) 함수를 만들었다. 메모장 등에서 텍스터 파일을 작성하면 문장 끝에는 16진수 0x0d 0x0a의 두 바이트가 붙어 있다. String readLine( File inf ) // 읽어올 파일을 변수로 받는다. { char buff[5..
Hangul_SD,H ( SD카드에 폰트화일,인덱스화일 ) 아두이노 Mega 사용시 주의할 점 SD카드를 사용 하려면 Uno와 SPI핀 번호가 달라 다음 2가지 중 하나의 방법으로 해야 한다. 쉴드를 아두이노 Mega에서 SD카드 사용을 위한 방법(Uno와 SPI핀 다름) Uno의 SPI핀번호에 해당하는 핀을 SPI핀과 연결함 번거롭다(납땜이 필요) 핀4개 사용불가 SD모듈을 따로 구입하여 사용한다. 얼마 안함 저렴함.( 추천 ) 폰트화일과 인덱스파일은 스스로 만들어 보세요. 규격은 여기로 대부분의 경우 따로 폰트가 필요 없는 Hangul_Direct.H를 Mega보드(120자 정도)와 같이 사용 하면 됩니다. HanGul.SD ver 1.0 // HanGul.SD ver 1.0 아두이노용 한글 출력 클래스 // // 제작자 : 신 옥 진 // // 재배포 금지..
Hangul_Direct.h ( 필요한 폰트만 코드에 삽입 ) 아두이노 한글 폰트 Code 자동생성 프로그램 ver 2.0 으로 폰트를 만들어 아두이노 소스코드에 삽입한 후 한글을 출력하는 한글 Class sd카드와 별도의 폰트파일이 필요 없다. 필요에 따라 16x16 폰트 에디터로 만든 사용자 문자도 사용 가능 하다. 아두이노 코드에서 사용 하는 예 사용 보드는 아두이노 mega ( Uno는 20~30자가 메모리 한계임) 코드 내부의 글자도 메모리를 잡아 먹는다. 그래서 F연산자로 플래쉬메모리(코드저장부분) 저장 하지만그래도 한계가 있다. Uno의 경우는 더 심하다. 코드내에 글자수가 많아 지면 담을 수 있는 폰트도 많이 줄어 버린다.이경우를 해결하기 위하여 코드안의 문장을 파일로 저장하고 출력 직전에 불러 오는 방식을 사용 하려고 한다.문제는 문장을 쓰는 SD...
16x16 폰트 에디터 버튼 기능 2Byte배열 만들기 2Byte배열[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} ; 4Byte배열 만들기 4Byte배열[16] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; 저장하기 이진파일로 저..
아두이노 DB와 휴대폰 바코드 연동하여 TFT LCD에 출력하기 동영상 확인하기 #define _TFTLCD_ myLcd // TFT LCD 이름 정의 #define _INDEX_TYPE_2_ // 인덱스방법 2로 사용시 // 방법 1로 사용시 주석처리 하면 됨 #include "D:\\Program Files (x86)\\Arduino\\myHeader\\HanGul_TFT.H" HanGul_TFT ht; // 한글출력 클래스 #define dbFileName "BarCode.txt" File dbFile; struct Record // 레코드 구조체 { String barCode; String productName; }; String readLine() { char buff[50]; int idx=0; while(true) { byte b,b2; b=dbFile...
아두이노 SD카드에 DaraBase구축 간단한 데이타베이스를 구축 할 것이다. 레코드는 다음과 같이 구성 (구조체) struct Record // 레코드구조체 { String barCode; String productName; }; 필드명 변수 내용 barCode String 바코드를 저장 productName String 제품명을 저장 간단이 레코드 추가 검색 기능만 일단 구현하고 삭제기능은 삭제한 곳의 빈공간 처리가 필요하여 추후에 추가 할 것이다.. SD카드 라이브러리에서 String을 파일에 쓰기에는 println함수가 있지만 읽기에는 없다. 그래서 readLine이라는 함수를 따로 만들었다. String readLine() { char buff[50]; int idx=0; while(true) { byte b,b2; b=dbFile...
아두이노와 바코드앱 메세지 주고 받기 이젠 PC대신 아두이노를 사용한다. 앱은 그대로 사용 하면 되고 아두이노는 TFT LCD 쉴드를 사용한다. 아두이노 우노의 경우 쉴드를 사용하면 블루투스는 0(RX),1(TX) 핀을 사용 해야한다. TFT LCD , SD카드 사용 하면 A5핀과 RX,TX핀만 남는다. 주의 점은 프로그램 업로드시 블루투스 모듈을 제거해야 한다. 업로드도 RX,TX핀을 사용 한다. 쉴드 때문에 핀에 선을 연결 하기 힘들다. 그래서 블루투스 연결 선을 납땜하여 사용한다. 핀에 직접 할 필요 없이 우도 보드를 보면 RX,TX,VCC,GND가 따로 모여 있는 곳이 있다. 이곳에서 선을 납땜하면 된다. 블루투스 RX는 아두이노 TX 블루투스 TX는 아두이노 RX에 연결한다. 동영상 확인하기 #define _TFTLCD_ myLcd..
DataGrid 프로그램과 앱 연동하기 ( 검색, 추가 ) 동영상 확인하기 DataGrid 프로그램에 추가한 코드 public static System.IO.Ports.SerialPort port; // 다른 폼에서 접근하기 의해 port변수설정 string barCode = ""; bool barCodeOn=false; private void btBarcode_Click(object sender, EventArgs e) { if (! barCodeOn) { port = myPort; // PotOpen폼에서 myPort 이용하기 위해 PortOpen frm = new PortOpen(); DialogResult re= frm.ShowDialog(); if (re == DialogResult.OK ) { btBarcode.Text = "바코드\nOn"; btBa..
PC와 앱사이 메세지 주고 받기 이제 프로그램을 수정하여 PC와 앱이 메세지를 주고 받게 하겠다. 메세지 흐름 메세지 의미 휴대폰앱 to PC B바코드 바코드 전송 A상품명 상품 등록 Pc to 휴대폰앱 -1 검색에서 일치하는 바코드 없음 -2 상품명 등록이 중복임 Cancel 1 정상 등록됨 OK 동영상 확인하기
PC에서 블루투스 동글 사용하여 휴대폰과 연결하기 내 PC가 구형이라 블루투스 기능이 없다. 그래서 블루투스 동글을 사용했다. 동글도 없다면 아두이노 보드나 UART convert를 블루투스모튤과 연결 하면 된다. 연결시 미리 터미널 프로그램을 실행한후 블루투스 ComPort에 연결 한다. 이렇게 안하면 앱에서 연결이 실패한다. 앱인벤트 소스 외부스캐너사용 체크를 하면 안된다. 실행화면 https://youtu.be/zPJhBbXLF6s
앱인벤트로 BarCode 읽기 휴대폰을 Barcode Reader로 사용하려고 한다. 읽은 바코드는 PC의 XML 데이타베이스와 연동 할 것이다. 그리고 아두이노 TFT LCD SD카드를 이용하여 PC가 아닌 아두이노에 데이타베이스를 만들어 운영 할 계획이다. 먼저 앱 인벤트로 바코드를 읽는 부분을 만들어야 겠다. 이미 만들어진 부분을 활용 하면된다. 블루투스로 데이타를 PC로 넘기는 수정만 하면 된다.
한글CLASS 메소드 HanGul_SD.H HanGul_Direct.H Class 메소드 void start() 한글클래스 시작 void end() 한글클래스 종료 : 사용 안해도 됨 void color(int _c ) 글자색 void color(int _c ,int _bk) 글자색, 배경색 void fill(int _c) 바로 앞에 출력한 문자열을 _c 색으로 채우기 void fill() 배경색으로 채우기 void rect(int _c) 바로 앞에 출력한 문자열에 _c 색으로 테두리 그리기 void rect() 문자색으로 테두리 그리기 void under(int _c) 바로 앞에 출력한 문자열에 문자색으로 밑줄 그리기 void under() 문자색으로 밑줄 그리기 void print( String s, int x, int ..
한글출력 Class 폰트파일, 인덱스 규격 HanGul.TFT.H ver 1.0 아두이노용 한글 출력 클래스 사용할 폰트와 인텍스는 다음 규격으로 만들어 사용 하세요.( Binary 파일로 작성하세요) 폰트 파일 규격 구조 레코드당 : 32 Byte Font Data Binary File 폰트 기록 순서 코드 값이 작은 것부터 기록 폰트파일 32Byte 32Byte : 32Byte 인덱스 방법 필드 1 필드 2 레코드 사이즈 인덱스 방법 1 폰트offset : 4byte Long 4Byte 인덱스 방법 2 폰트코드 : 4byte Long 폰트offset : 4byte Long 8Byte 인덱스 방법 1 인덱스 방법 2 폰트 offset : 4Byte 문자코드 : 4Byte 폰트 offset : 4Byte 폰트 offset : 4Byte 문자코드 ..
앱인벤터 블록 소스 블루투스 연결 부분은 여기로 이동하세요.