일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- datagridview 직접입력
- allow_anonymouse
- c# datagridview 데이터 넣기
- invalid data
- 공인IP
- html #select #option #multiple
- AntDesign
- mosquitto.conf
- mySQL_Replication
- 맥 어드레스
- 데이터테이블 데이터 넣기
- Replication
- DatePicker
- timepicker
- pm2 설치
- pm2 확인
- setInterval 중지
- 서버동기화
- pm2 시작
- pm2 상태 확인
- transfer
- 1883
- pm2
- setInterval clear
- mosquitto
- setInterval 정지
- setInterval 외부 정지
- DataGridView 직접 입력
- listener 1883
- map이 undefined가 뜰 때
- Today
- Total
개발 노트
기기 통신 방식 본문
[c# 시리얼 통신 클래스 만들기]
시리얼 포트 열기
private void buttonserialPort_Click(object sender, EventArgs e)
{
// 1. SerialPort 클래스 객체 생성 (COM5 포트를 사용)
SerialPort sp = new SerialPort("COM5");
// 2. 시리얼포트 오픈
sp.Open();
// 3. 시리얼포트에서 한 라인 읽기
string data = sp.ReadLine();
Console.WriteLine(data);
// 4. 시리얼포트 닫기
sp.Close();
Console.WriteLine("Press Enter to Quit");
Console.ReadLine();
}
시리얼포트 쓰기
private void buttonSerialWrite_Click(object sender, EventArgs e)
{
// 1. SerialPort 클래스 객체 생성 (COM6 포트를 사용)
SerialPort sp = new SerialPort("COM6");
// 2. SerialPort 포트 셋팅 설정
sp.PortName = "COM6";
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
// 2. 시리얼포트 오픈
sp.Open();
// 3. 시리얼포트에서 한 라인 쓰기
sp.WriteLine("Hello World");
// 4. 시리얼포트 닫기
sp.Close();
}
시리얼포트 비동기처리
private void button1_Click(object sender, EventArgs e)
{
string portName = "COM6";
// 시리얼포트 열기
SerialPort sp = new SerialPort(portName);
sp.Open();
// 읽기 작업쓰레드: Read from serial port
var cancel = new CancellationTokenSource();
var readTask = Task.Factory.StartNew(() =>
{
while (!cancel.IsCancellationRequested)
{
string readMsg = sp.ReadLine();
if (readMsg.ToLower() == "quit")
{
Environment.Exit(0);
}
Console.WriteLine(readMsg);
}
}, cancel.Token);
// 메인쓰레드: Write to serial port
while (true)
{
string sendMsg = Console.ReadLine();
if (sendMsg.ToLower() == "quit")
{
sp.WriteLine(sendMsg);
cancel.Cancel();
break;
}
sp.WriteLine(sendMsg);
}
// 시리얼포트 닫기
sp.Close();
}
시리얼포트 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Collections;
namespace serialConnect
{
class SerialComm
{
public ArrayList arrSerialbuff = new ArrayList(); // 수신용 List 버퍼 선언
private SerialPort sp = new SerialPort();// 시리얼 포트 선언
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
// Comport 열기
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
public string Comport_Open(string port, string baud, string databits, string parity, string stop)
{
try
{
// 시리얼 통신 포트, 보레이트, 데이터 비트, 패리티, 스톱 비트를 설정
sp.PortName = port;
sp.BaudRate = int.Parse(baud);
sp.DataBits = int.Parse(databits);
sp.Parity = (Parity)Enum.Parse(typeof(Parity), parity);
sp.StopBits = (StopBits)Enum.Parse(typeof(StopBits), stop);
// 이미 오픈상태인지 체크하여 아니라면
if (!sp.IsOpen)
{
// 포트 열기
sp.Open();
}
// 포트가 열린 상태이면 연결 완료
if (sp.IsOpen)
{
return "연결완료";
}
else // 포트열기가 열린상태가 아니라면 연결 실패
{
return "연결실패";
}
}
catch (Exception ex)
{
throw ex;
}
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
// 수신 처리 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
public void RcvSerialComm()
{
try
{
// 포트가 열린 상태인지 체크
if (sp.IsOpen)
{
// 시리얼 수신 버퍼에 적재된 byte 개수를 읽어 온다.
int nbyte = sp.BytesToRead;
// 시리얼 byte개수 만큼 버퍼를 생성한다.
byte[] rbuff = new byte[nbyte];
// byte개수가 0보다 크다면
if (nbyte > 0)
{
// 수신버퍼에서 버퍼의 지정된 인덱스 부터 개수 만큼 읽어 온다.
sp.Read(rbuff, 0, nbyte);
}
// ArrayList에 적재한다.
for (int i = 0; i < nbyte; i++)
{
arrSerialbuff.Add(rbuff[i]);
}
}
}
catch (Exception ex)
{
// 수신에러 발생시
// ArrayList를 클리어한다.
arrSerialbuff.Clear();
//예외를 던지고 종료
throw ex;
}
}
}
}
깃
https://github.com/zakigaebal/serialConnect
시리얼프로그램
https://unininu.tistory.com/304
RS485
https://developer-depot.tistory.com/13
LORA통신이란
https://blog.naver.com/milkysc/221920748769
[포스팅]기기 통신 방식
[포스팅]SERIAL 통신
[포스팅]485 통신
[포스팅]LORA 통신
IOT는 그야말로 통신으로 모두가 연결되어 있는 개념입니다.
IOT에서 고려하고 있는 통신 시스템은 일반적으로 다음과 같습니다.
유선: 광, 유선이더넷, 전화모뎀, 케이블모템,PLC(전력선통신)
광: 국내에서는 가장 빠르고 안정적이지만 해외시장을 고려한 제품이라면 이러한 연결방식은 신중히 판단해야 합니다고속 인터넷 보급에서 한국이 전세계 1위이기에 광통신이 가정에까지 들어올 수 있는 것이지 이는 한국 이외의 대부분의 국가에서는 꿈도 꿀 수 없는 상황입니다.
시리얼 통신이란
병렬 데이터의 형태를 직렬방식으로 전환하여 데이터를 전송하는 컴퓨터 하드웨어의 일종
시리얼이라는 것은 직렬이라는 뜻으로 패러럴과 반대되는 단어이다.
직렬통신과 병렬통신의 2가지 방식이 존재한다
직렬통신은 데이터를 보낼때 한 데이터 선에서 데이터를 보내는 방식이고
병렬통신은 여러 개의 선에서 보내고자 하는 데이터를 나눠서 보내는 것이다.
예를 들어 1010데이터를 보내려고 할때 상황은 아래와 같다
- 시리얼 통신에서는 1개의 LANE으로 데이터를 모두 보낸다
- 병렬통신에서는 4개의 LANE이라고 가정할때 각 LANE(0~3번 LANE)에 1, 0, 1, 0 을 나눠서 보낸다
아두이노를 사용하면 가장 자주 접하는 통신방법이 Serial 통신이다 일단 PC와 연결되는 것 자체가 아두이노 입장에서는 Serial 통신을 사용하는 것이다
http://winnerspowerup.cafe24.com/archives/309
http://melonicedlatte.com/2021/03/25/113400.html
https://www.hardcopyworld.com/?p=2080
https://developer-depot.tistory.com/13
'프로그래밍 > C#' 카테고리의 다른 글
바이너리파일저장 (0) | 2022.03.29 |
---|---|
텍스트파일저장 (0) | 2022.03.29 |
테이블체크 (0) | 2022.03.28 |
C# 로또 조합번호 전부 가져오기 (0) | 2022.03.24 |
2022.03.21_발정데이터_farm3797_09시&17시 (0) | 2022.03.21 |