Подключитесь к SQL Server с микроконтроллера (Arduino или Fez с .Net Micro Framework)

Я ищу примеры, учебные пособия или просто «это + это + это должно работать» для чтения и записи на SQL-сервер (2008 г.) с микроконтроллера, такого как плата Arduino. Я также рассматривал (и, вероятно, буду использовать) устройства с .Net Micro Framework, такие как Fez Cobra. . Micro Framework не включает ADO. Я уверен, что это будет связано с XML, но я не могу понять, какую технологию следует исследовать дальше. Я не хочу, чтобы приложение для ПК служило посредником.

Спасибо!


person Tim    schedule 16.09.2010    source источник
comment
Так? Как тебе это наконец удалось? :)   -  person mac    schedule 20.10.2010
comment
Я еще не купил Fez. Их часто нет в наличии. Я думаю, что мне придется написать сервис/приложение, чтобы сидеть между ними. Насколько я понял, SQL Express не поддерживает веб-сервисы. Если я ошибаюсь в этом, не стесняйтесь сказать об этом (я был бы рад узнать это!). В противном случае это был бы лучший подход.   -  person Tim    schedule 29.10.2010


Ответы (6)


Честно говоря, я бы сделал тонкий сервис, который располагался бы перед вашей базой данных и использовал бы что-нибудь легкое, например protobuf. чтобы получить данные в файл micro.

Я сомневаюсь, что вы сможете внедрить TDS при ограниченной мощности и памяти AVR.

person joshperry    schedule 16.09.2010
comment
Интерфейс веб-службы может быть еще проще. Встроенные веб-сервисы SQL Server могут позаботиться о серверной части за вас. - person David; 17.09.2010
comment
@David, реализация полного клиента веб-сервиса в arduino/avr кажется немного раздутой? - person Brady Moritz; 15.11.2010

Все еще не уверен, о чем ваш вопрос ... Тег «arduino» позволяет мне думать, что вы спрашиваете о коде Arduino, но комментарий ниже заставляет меня сомневаться, что вы спрашиваете о .NET. Вот предварительный ответ на вопрос, как управлять вещами на стороне Arduino.

Способ 1: использование последовательной связи и прокси

На Arduino я бы просто выводил SQL-запросы на последовательный порт, например:

Serial.begin(115200);
Serial.println("INSERT INTO table_name VALUES (value1, value2, value3,...);");

На стороне сервера (или на стороне компьютера, который вы используете для доступа в Интернет) я бы написал простой скрипт, который открывает соединение с БД и перенаправляет на нее запрос. Этого можно добиться с помощью команд интерфейса командной строки или открытия сетевого подключения на заданном порту. Я не использую Windows/.NET и т. д., но в системе GNU/Linux, используя python и mysql, код проверки концепции, который я бы написал, будет выглядеть примерно так (ОСТОРОЖНО: НЕПРОВЕРЕНО!):

import os, serial

self.ser = serial.Serial("/dev/ttyUSB0", 115200)
query = self.ser.readline().strip()
return os.popen("mysql -u<my_usr> -hlocalhost -p<my_pass> -e" + query)

Способ 2: с помощью сетевой платы или непосредственно сетевой платы Arduino.

Последний будет поставляться иногда в ближайшее время (см. ="nofollow">эту презентацию, если вам интересно). Первый — уже доступен. Написание кода для него должно быть предельно простым (см. документацию). В результате должно получиться что-то вроде (НЕПРОВЕРЕНО):

Serial.begin(<speed>);
Ethernet.begin(<mac_number>, <ip>);
Client client(<server>, <port>);
client.println("GET <path> HTTP/1.0");
while (client.available()) {
  char c = client.read();
  Serial.print(c);
}

ХТХ!

person mac    schedule 24.09.2010
comment
Прямого последовательного соединения с сервером sql нет. Если вы имеете в виду плату / экран, который связывается с микроконтроллером по серийному номеру, то да, это будет его частью. Но мой вопрос в том, как будет выглядеть код, который инициирует соединение с сервером sql и закрывает его? То, что вы опубликовали, - это промежуточные команды sql, но как вы открываете/закрываете это соединение? - person Tim; 27.09.2010
comment
Обновление в ответ на ваше редактирование: я упоминаю платформы Arduino и .Net Micro, но проблема та же. Ни один из них не поддерживает встроенный способ подключения к SQL, и мне трудно понять, как подключиться к SQL на низком уровне. Все подключаются к SQL, используя существующие классы: для .NET есть ADO и т. д.; для PHP есть классы. Для Arduino/.Net Micro классов нет. (продолжение) - person Tim; 27.09.2010
comment
Ваш пост подразумевает, что вы можете подключиться через запрос GET. Хорошо, если это сработает, но не могли бы вы привести пример того, как будет выглядеть полный запрос GET для конкретной SQL-команды SELECT/INSERT/UPDATE? - person Tim; 27.09.2010
comment
@Tim - Как уже говорилось ранее, я не работаю на платформах MS, поэтому я не могу дать вам проверенный ответ, но, погуглив доступ к серверу Microsoft SQL через HTTP, вы получите: tinyurl.com/2uh8rev, который (по крайней мере, для пользователя GNU/Linux), кажется, отвечает всем требованиям. Остерегайтесь того, что мой пример кода был просто предназначен для проверки концепции: если вы выберете это решение, я бы предпочел использовать POST или GET через https по соображениям безопасности. [следует другой комментарий] - person mac; 28.09.2010
comment
@ TIm — Что касается существования классов: Arduino использует C++, поэтому вы должны иметь возможность использовать такой класс: cql.com/cppint.html, если хотите. Я также прочитал в этой теме: tinyurl.com/32qh6wb, что SQL поддерживает интерфейс XML/SOAP, поэтому вы можете также посмотрите на это. - person mac; 28.09.2010

Я не знаю, откуда у вас возникла идея XML, но я советую вам взглянуть на Документация по протоколу Microsoft SQL Server, которая дает вам довольно хорошее представление о том, что вам на самом деле нужно реализовать для естественного общения с вашим SQL-сервер.

person Jim Brissom    schedule 16.09.2010

В зависимости от пары параметров:

1.0 Вы подключены через последовательный порт к хост-компьютеру.

Создайте клиентское приложение на хост-компьютере, которое получает команды через последовательный порт и переводит эти команды в sql, используя ADO или что вы предпочитаете.

2.0 Вы используете экран Ethernet.

В этом случае у вас теперь есть несколько вариантов:

2а. Подключитесь к веб-службе и используйте Soap или аналогичный http-протокол для отправки команд, которые служба преобразует в команды базы данных.

2б. Попытаться реализовать хотя бы часть протокола TDS и напрямую подключаться к серверу sql и выдавать команды непосредственно ему.

person Brady Moritz    schedule 15.11.2010

Вы можете установить конечную точку HTTP в SQL Server, а затем отправлять на нее команды HTTP put.

person cyberloco    schedule 31.07.2012

Посмотрите на http://www.logicdata.it/sqleng, у них есть хороший SQLServer для микро.

person Mauro Zanin    schedule 12.07.2011