Управление arduino через php

Управляем arduino из PHP через COM-порт

Arduino подключается к компьютеру через USB, но на самом деле arduino отправляет/принимает данные через виртуальный COM-порт.

С отправкой данных в COM-порт нет ничего сложного:

А вот читать PHP умеет только на линуксах, в старом добром windows читать данные напрочь отказывается! (проверял на php до версии 5.3.5 включительно)

Открывает порт, а потом с «радостью» говорит: «ура. я прочитал 0 байт )))»

Вот и пришла идея написать файл позволяющий читать данные из COM-порта в консоль, а уже из неё брать результат в PHP, благо уж это то он делать умеет. Далее добавил туда возможность записи данных в COM-порт, потом добавил возможность выводить наличие всех доступных COM-портов, естественно не обошел и возможность читать/устанавливать регистры настроек порта (скорость,четность,количество информационный бит в байте, ну и т.д.). Ну а перед публикацией добавил туда еще и параметр /? чтоб можно было все наворотики прочесть, даже несколько примеров туда написал. И всё это естественно на могучем Русском (кроме названий передаваемых при запуске параметров).

А работает это так:

Кладём файл exe в папку рядом с файлом php

Пишем следующий код:

где файл — (в первой строке кода) это название файла.exe можете его обозвать по своему усмотрению.

iconv(‘CP1251′,’UTF-8//IGNORE’,$param[$i]) — преобразуем ответ из кодировки CP1251 в UTF-8.

Тут меняем UTF-8 на ту кодировку в которой у Вас написан файл.php

Если в результате вы получите каракули, то поменяйте CP1251 на CP866.

В результате Вы должны увидеть таблицу с пояснениями всех доступных параметров на Русском.

Хотел бы отметить то, что настройку регистров com-порта достаточно произвести один раз, а потом просто читать/писать без параметров настройки.

Лично я устанавливаю параметры так:

exec(«файл com5 baud=9600 parity=n data=8 stop=1 xon=off octs=off odsr=off idsr=off dtr=off rts=off 2>&1»,$param);

Для тренировки, можно запустить файл непосредственно из командной строки.

Источник

Простое управление arduino через интернет

Всем добрый день.

Около года назад я написал небольшую обзорную статью для управления Arduino через интернет, с помощью сервера NinjaBlocks. Это было довольно хорошее и удобное решение и оно отлично работало, пока в один прекрасный момент не начались проблемы с соединением. Попытки уговорить разработчиков через форум решить проблемы были напрасны — они просто игнорировали мои просьбы и не удосужились даже ответить, что было очень печально.

С того момента был просканирован весь интернет в поисках замены — и было найдено много очень интересных проектов, но они либо были слишком сложными в реализации и требовали значительных знаний в области программирования, либо были попросту неудобны. И вот тут и пришла мысль почему бы не сделать все самому.

Конечно очень хотелось использовать современные протоколы передачи данных websockets или mqtt, которые позволили бы контролировать все процессы в реальном времени, но если с клиентом для arduino дела обстояли хорошо — наличие неплохих библиотек радовало, то вот с серверной стороной дела обстояли хуже — нужны были серверы с поддержкой нужных протоколов, которых у обычного хостера не было. А заводить свой сервер ради зажигания светодиода не хотелось. И выбор пал на старый и добрый http.

1. Как это всё работает.

У нас имеется:
— сервер на php расположенный на хостинге который привязанный к доменному имени
— клиент в виде arduino
— панель управления

Arduino подключается к серверу и отправляет GET запрос, где содержатся значения датчиков температуры.

Сервер принимает запрос, и записывает значения температур в текстовые файлы. При этом читает из текстового файла значение установленного выхода для arduino и отправляет в ответ на запрос контроллера.

Arduino принимает ответ от сервера и согласно ему устанавливает состояние своего выхода

Панель управления, используя Ajax, считывает значение температуры из текстовых файлов и обновляет показания датчиков. А также считывает их текстового файла состояние выхода и обновляет его на странице. С помощью того же Ajax через форму в текстовый файл записывается значение выхода контроллера, откуда потом будет брать значение сервер и отправлять контроллеру.

2. Клиент на Arduino

Скетч довольно простой, всё что он делает — это собирает значение датчиков и отправляет их на сервер, получает ответ, включает или отключает выход.

#include
#include
#include
#include

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

EthernetClient client;
char server[] = «*************»; // имя вашего сервера
int buff=0;
const int led=5;

void setup()
<
Ethernet.begin(mac);
sensors.begin();
pinMode( led, OUTPUT);
digitalWrite(led, LOW);
>

if (client.connect(server, 80))
<

client.print( «GET /add_data.php?»);
client.print(«temperature=»);
client.print( sensors.getTempCByIndex(0) );
client.print(«&»);
client.print(«&»);
client.print(«temperature1=»);
client.print( sensors.getTempCByIndex(1) );
client.println( » HTTP/1.1″);
client.print( «Host: » );
client.println(server);
client.println( «Connection: close» );
client.println();
client.println();

while (client.available())
<
char c = client.read();
if ( c==’1′)
<
buff=1;
>
if ( c==’0′)
<
buff=0;
>
>
client.stop();
client.flush();
delay(100);
>
else
<
client.stop();
delay(1000);
client.connect(server, 80);
>

if ( buff==1)
<
digitalWrite (led, HIGH);
>
else
<
digitalWrite(led, LOW);
>
delay(500);
>

3. Сервер и панель управления

Сервер состоит всего из нескольких файлов:

index.php — панель управления
add_data.php — файл обрабатывающий запросы с контроллера и отсылающий ответ обратно на arduino
style.css — определяет внешний вид панели
Папка transfer — содержит файлы, с помощью которых происходит считывание и запись значений из текстовых файлов.
led.php — записывает состояние выхода в файл out-1.txt, отправленное через форму в панели управления
ledstate.php — считывает состояние из текстового файла out-1.txt и выводит на панели в виде «ON» или «OFF»
temp-1.php и temp-2.php — считывают значения температуры из файлов in-1.txt и in-2.txt и отправляют на панель управления.
Папка txt — своего рода база данных для хранения информации.

Сервер на самом деле очень простой и его сможет установить себе любой человек с минимальными познаниями, например, как я. До работы над этим проектом у меня был опыт работы только с arduino, поэтому php, ajax, html и css пришлось изучать буквально с нуля.

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

Уверен, что матерые программисты будут пинать меня и тыкать носом в те места где можно было бы написать код более лаконично и правильно. Я это только приветствую.

Если вы увидели, что некоторые вещи можно сделать проще и быстрее, то сообщите мне.

Что в итоге мы имеем?

— все просто и понятно
— можно настроить под свои нужды и задачи
— хорошая стабильность
— сервер можно развернуть на любом бесплатном хостинге

— большое количество запросов на сервер ( некоторым хостерам это может не понравиться, в этом случае нужно увеличить паузу между запросами в скетче)
— кушает много трафика со стороны клиента ( при 1 запросе в секунду выходит около 300 Мб в сутки)
— существует небольшая задержка на включение выходов ( может быть критично для некоторых случаев)

Планы на будущее:

— добавить кнопку на контролере для включения и выключения реле с изменением состояния на сервер
— добавить авторизацию
— добавить идентификационные ключи в запросах
— организовать работу нескольких плат одновременно с одной панелью управления
— добавить подтверждения от контроллера о включении выхода
— очень хотелось бы использовать протоколы websockets или mqtt, но всё же склоняюсь к использованию websockets c использованием socket.io

Возможно, если будет интересно, напишу статью об управлении через интернет wifi модулем esp8266. Его я уже успел успешно опробовать и убедился, что все работает, правда, там есть свои нюансы в работе.

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

Прошу дать совет как лучше реализовать авторизацию в панели управления, чтобы была относительно простая и понятная установка и приемлемый уровень безопасности.

Все желающие могут сами посетить страницу моего сервера и проверить в действии arduino.zhodinovel.com
. Для изменения выхода контроллера поставьте маркер на нужное значение и нажмите «ОТПРАВИТЬ» .

Всем спасибо за внимание!

UPD. Добавил обратную связь в панель в виде фоторезистора. Когда лампочка выключена, показания около 130, когда включена — 900.

Источник

PHP + Arduino on Windows

Arduino and the Internet of the things

Increasingly stronger being the union of electronic devices especially Arduino with a Web control, there are several ways of working from the server side (PHP, ASP, Python, Node…) in this tutorial we will make a connection with PHP.

The Ideal

If you have a device to obtain to him many customers the ideal is to work with a database, if someone write a fact (for example a room temperature) then only a PHP (or another script of any language) database attacks and acts through the serial port with the Arduino. But in this case as an example we will do it without a database. In the same way if we want to read a temperature, the ideal would be a script to read the analog data and keep it in the database even made history by date and time and the users access to the database and read them. If you are not a programmer that you is perhaps a bit complicated but I felt compelled to comment on it.

Our project

There are libraries of control of the serial port to PHP, the problem is that in many computers not working properly it is best to create our own library, on the other there is much documentation for this type of control in Linux by which this example will be for WAMP on Windows servers.

The WAMP Server

A WAMP server consists of a series of programmes prepared and ready for operation, on the one hand contains a server Apache is a server for html, when you connect to any website asking for a particular page on a server such as the Apache or similar returns what they requesting, an interpreter of PHP, which is the tool that interprets the PHP we generate code and a MySQL database which as its name suggests, serves to store data from a form ranked.

About PHP

PHP is a language oriented programming web side of the server, which means, PHP generates a HTML, for example when a blog look for an entry or shop online a PHP product takes care of read these requests and generates an HTML according to the requested, among other functions to access the database, for example a PHP log reads your name and password verifies that are correct and generates an HTML with the page to which you agree (for example your email address) or another in which a logging error detected.

Serial port on PHP

The serial port settings.

Port serial / COM (on Windows) you can we will try in two ways, the first is using shell_exec () this PHP function executes a command, is create a program like the following:

It is as if we entered in the Windows «cmd» command line and tecleáramos dir, it shows the directories and files in the place where the PHP is in question. Here starts our program by setting the port with the following command:

We can change the port settings but are those that come by default in Arduino so they will be functional.

Acting on the port

On the other hand the serial port for PHP can be considered a file and we can read it as read a txt. Before continuing to comment that we will create two PHP files one is writing and reading, we imagine an adjustable lighting LEDs control system, a PHP will use to the Arduino that intensity will operate each LED, while another will read the States (for example to show them on a website) or consumption.

PHP script port

Using $fp = fopen («common«, «w») will open the «file» as we mentioned is the port as a txt. where it N is the port number (sometimes when connecting and disconnecting the Arduino change) and w which is only writing (a w + is reading and writing).

The following function sends the stirng for the serial ($fp, str.), fwrite being srt the string to send and it is finally closed the port Although PHP does it automatically, fclose ($fp).

Comment that if we have an error when opening $fopen will give us an error that we will use to warn on the web, so that the final program will be:

PHP of the port reading

We must also configure and open the port, check that there is access, and in this case we will use fwrite($fp,int) which will return a string of the reading of the serial, with a distance of int bytes, i.e. will read up to int and stop.

If you need a developer back-end or front-end and also you do projects electronic, you can contact with me.

Exhibitor Arduino

If you wish to buy an Arduino for this or other projects click here or on the image.

Источник

How to create a website communicating Arduino by using PHP © GPL3+

Create a professional website communicating Arduino Ethernet Shield by using HTML, CSS, JavaScript, and PHP through your Localhost.

Arduino UNO
× 1
Arduino Ethernet Shield 2
× 1
DHT11 Temperature & Humidity Sensor (4 pins)
× 1
2 Way Relay
× 4
Mini Breadboard
× 1
Flame Sensor
× 1
MQ4 Gas Sensor
× 1
LDR
× 1
Hygrometer Sensor
× 3
ADSL Router Cable
× 1
Plug (one way)
× 7
Socket (one way)
× 7
9V Battery
× 1
9V Battery Barrel Cable
× 1
Hot glue gun (generic)

How to use TheAmplituhedron.com to improve IoT projects? is my new project that handles server-side programming for you. By using TheAmplituhedron.com as a host, you can send and get data packets effortlessly over the Internet.

To support my projects and articles, you can visit my website here :)

Creating a professional website to control my aquarium and my irrigation system in my home and

to receive the information about the home when I am not at the home is the main aspect of this project.

To achieve that goal, I created the Arduinautomotion project that includes 4 different HTML pages (Arduinautomotion.php, Arduinautomotioncontrol.php, Arduinautomotionformvalue.php, Arduinautomotioncommunication.php ) in my Apache localhost.

Also, the Arduino Ethernet Shield hosts another HTML web page (ArduinoSide.php) which can be reached with the chosen IPAddress, to communicate with the Arduinautomotion website.

I had thought about this project since I had to go a vacation for 2 weeks and I could not make the adjustments of my aquarium because of it. Sometimes I need to shut down the internal filter to avoid the oxygen level increasing in the aquarium or I need to open my feeder to feed the fish remotely. I added six options to control my aquarium’s content and one option to activate the irrigation system.

Furthermore, you can easily get the data about the home (such as temperature and humidity values come from DHT11 Sensor or methane gas value in the home comes from MQ4 Sensor) with Arduinautomotion through Arduino Ethernet Shield.

Thus, the Arduinautomotion website has an easy interface to get and send data about the home from Arduino.

HTML, CSS, JavaScript, PHP, and jQuery languages’ knowledge will be required to understand whole project’s content so that this is just a showcase for the project but if you know the languages, you can find all the web pages which the project includes as PHP code files below.

Note: I used Notepad++ to program the web pages.

Источник

Adblock
detector