2 — Умный дом на Ардуино. Глава II — Передача и чтение данных. Часть 1 — Visual Studio 1

Прежде чем писать дальше об управлении и мониторинге умного дома, необходимо научиться получать данные с контроллеров, а также отправлять на них команды с использования различных платформ разработки.

Рассмотрим одну из них — Microsoft Visual Studio 2013

Загрузить можно с офф сайта триал версию на 90 дней

Для передачи и чтения данных по Seial при помощи Microsoft Visual Studio 2013 не требуется ни каких дополнительных библиотек или компонентов. Мы можем напрямую подключиться к нашему ком-порту и писать или читать с него данные.

Создадим новый проект и добавим на форму:

  • timer(задержку ставим 500 миллисекунд)
  • serialport(В настройках указываем номер и скорость порта)
  • button
  • 2 textbox
  • 2 label
      SendReadVS2013.png

 

Создадим обработчики событий:

  • Нажатия кнопки(button)
1
2
3
4
5
6
7
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
var dataArray = new byte[] {0x01};
serialPort1.Write(dataArray, 0, 1);
timer1.Enabled = true;
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
var dataArray = new byte[] {0x01};
serialPort1.Write(dataArray, 0, 1);
timer1.Enabled = true;
}
  • Загрузки формы(form)
1
2
3
4
 private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Open();
}
 private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Open();
}
  • Таймера
1
2
3
4
5
6
7
8
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
serialPort1.ReadLine();
textBox1.Text = serialPort1.ReadLine();
textBox2.Text = serialPort1.ReadLine();
button1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
serialPort1.ReadLine();
textBox1.Text = serialPort1.ReadLine();
textBox2.Text = serialPort1.ReadLine();
button1.Enabled = true;
}

Запустим приложение, подождем 10 секунд, пока мастер-контроллер получит данные о температуре и нажмем нашу кнопку(button)

SendReadVS2013_2.png

ЗЫ. Предварительно немного модифицируем Масте-Контроллера

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//Модифицированный скетч мастр-контроллера из статьи http://bigbarrel.ru/?p=1257
String
temp_kitchen_pol, //температура пола кухни
temp_bath_pol;//температура пола ванной
int pin_inter=9;//not 13,12,11,10 //посылаем сигнал прерывание на Slave контроллер
 
void setup() {
.begin(19200);
pinMode(pin_inter, OUTPUT);
 
}
 
void loop() {
synch();//Опрос слейв контроллера
if (Serial.available())//Ожидаем опроса
{
int sr;
sr = Serial.read();
if (sr==0x01 || sr-'0'==0x01 || sr=='1')//команда для начала передачи
{
Serial.println("begin");//начало передачи, для отсеиания мусора в сериал
Serial.println(temp_kitchen_pol);//отпраляем температуру теплого пола кухни
Serial.println(temp_bath_pol); //отправляем температуру теплого пола ванной
}else Serial.println(sr);
}
}
 
void synch(){
if (my_timer(10000,0))
{
send_serial(0xf1);//опрос первого контроллера
seria_input();
 
}
}
 
void seria_input(){//прием сообщения от Слейв контроллера
int val;
if (Serial.available())
{
val=Serial.read();
if (val==0xf1)//1
{
temp_kitchen_pol=get_temp_float_serial();// получаем температуру
temp_bath_pol=get_temp_float_serial();// получаем температуру
}
}
}
 
void send_serial(int A)//отправляем сообщение Слейв контроллерам
{
digitalWrite(pin_inter, HIGH);
delay(20);
Serial.write(A);
delay(100);//ожидаем ответ от контроллера
digitalWrite(pin_inter, LOW);
}
//Модифицированный скетч мастр-контроллера из статьи http://bigbarrel.ru/?p=1257
String
temp_kitchen_pol, //температура пола кухни
temp_bath_pol;//температура пола ванной
int pin_inter=9;//not 13,12,11,10 //посылаем сигнал прерывание на Slave контроллер

void setup() {
Serial.begin(19200);
pinMode(pin_inter, OUTPUT);

}

void loop() {
synch();//Опрос слейв контроллера
if (Serial.available())//Ожидаем опроса
{
int sr;
sr = Serial.read();
if (sr==0x01 || sr-'0'==0x01 || sr=='1')//команда для начала передачи
{
Serial.println("begin");//начало передачи, для отсеиания мусора в сериал
Serial.println(temp_kitchen_pol);//отпраляем температуру теплого пола кухни
Serial.println(temp_bath_pol); //отправляем температуру теплого пола ванной
}else Serial.println(sr);
}
}

void synch(){
if (my_timer(10000,0))
{
send_serial(0xf1);//опрос первого контроллера
seria_input();

}
}

void seria_input(){//прием сообщения от Слейв контроллера
int val;
if (Serial.available())
{
val=Serial.read();
if (val==0xf1)//1
{
temp_kitchen_pol=get_temp_float_serial();// получаем температуру
temp_bath_pol=get_temp_float_serial();// получаем температуру
}
}
}

void send_serial(int A)//отправляем сообщение Слейв контроллерам
{
digitalWrite(pin_inter, HIGH);
delay(20);
Serial.write(A);
delay(100);//ожидаем ответ от контроллера
digitalWrite(pin_inter, LOW);
}

Один коммент “2 — Умный дом на Ардуино. Глава II — Передача и чтение данных. Часть 1 — Visual Studio

  1. Ответить yuler Июл 13, 2015 01:36

    Здравствуйте!
    нужна помощ по создании сет из одного компьютера и десяти ардуино нано.
    проще по сборки, мах485 и недорогостояшим простыми деталями и сборки.
    буду рад и блогодарен заране.

Добавить комментарий