Ошибка базы данных WordPress: [Table './meandr_base/anzpz_usermeta' is marked as crashed and last (automatic?) repair failed]
SELECT user_id, meta_key, meta_value FROM anzpz_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC

0

Термометр на микроконтроллере PIC16F628A и цифровом датчике DS1620. Контроль через Интернет

Запуск Веб-сервера :
В Linux набрать команду :
sudo /opt/lampp/lampp start

Если сценарий cgi_ чтение температуры.py выдаёт ошибку типа:
Permission denied: ‘/dev/ttyS0’
тогда в Linux введите команду:
sudo chmod 666 /dev/ttyS0
Эти сценарии также работают в Windows (тестировалось на XP и Wampserver).

#! /usr/bin/python
#-*- coding:utf-8 -*-

# сценарий cgi_чтение температуры.py
# (C) Фабрис Сэнсэр
# python 2.7
# сценарий cgi
# соединение RS232 с цифровым термометром на цифровом датчике DS1620
# http://fabrice.sincere.pagesperso orange.fr/cm_электроника/проект_pic/ЖК термометр_DS1620htm/ЖК термометр_DS1620.htm
# тест: ОК (linux/ubuntu 11.10 + xampp 1.7.7)
import cgitb # отладка программы cgi
cgitb.enable()
import serial # внешняя библиотека pyserial
# Библиотека pyserial :
# http://pyserial.sourceforge.net/shortintro.html
# http://pyserial.sourceforge.net/pyserial_api.html
import time
print «Content-Type: text/html\n\n»
print «»»<!DOCTYPE html
PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN»
«http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>
<html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»ru» lang=»fr»>
<head>
<meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
<title>Mesure de température</title>
<meta http-equiv=»Refresh» content=»10″/>
<meta name=»Author» content=»Фабрис Sincère»/>
</head>
<body>»»»
print ‘<p>Соединение с COM-портом</p>’
# предварительно, нужно создать реестр /opt/lampp/htdocs/температура
filename = ‘/opt/lampp/htdocs/ температура / температура.txt’
filename0 = ‘../ температура температура.txt’
print «<p><a href='»+filename0+»‘>Файл резервной копии</a></p>»
Fichier = open(filename,’a’)

Port = serial.Serial()

Port.baudrate = 9600
Port.bytesize=8
Port.parities=0
Port.stopbits=1
Port.xonxoff=0
Port.rtscts=0
Port.timeout=0.1 # в секундах

# Под Windows :
# COM1 -> 0 (или COM1)
# COM2 -> 1 (или COM2)

# Под Linux :
# внимание : разрешение 666
# > sudo chmod 666 /dev/ttyS0
# COM1 -> 0 (или /dev/ttyS0)
# COM2 -> 1 (или /dev/ttyS1)

nomport = 0
try:
int(nomport)
Port.port = int(nomport)
exept:
Port.port = nomport

print ‘<p>Открытие порта», Port.portstr,'</p>’

Port.open()

# чтение температуры
Port.write(‘\xAA\x00\x00’)

# чтение

MSB = Port.read() # старший байт
LSB = Port.read() # младший байт

if (MSB !=» and LSB != «):
temperature = ord(LSB) + 256* ord(MSB)
if temperature >= 256:
temperature = temperature — 512
temperature *= 0.5
affichage = «time».strftime(‘%H:%M:%S’,time.localtime()) + ‘ —-> ‘+ str(temperature) +’ °C’
print ‘<p>’+ affichage +'</p>’
Fichier.write(affichage +’\n’)
else:
print ‘<div style=»color:red;»>Устройство не понимает!</p>’

# чтение низкой температуры термостата
Port.write(‘\xA2\x00\x00′)

MSB = Port.read() # старший байт
LSB = Port.read() # младший байт

if (MSB !=» and LSB != «):
temperature = ord(LSB) + 256* ord(MSB)
if temperature >= 256:
temperature = temperature — 512
temperature *= 0.5
affichage = str(temperature) +’ °C’
print ‘<p>’+’Thermostat : TLow —>’+ affichage +'</p>’

# воспроизведение высокой температуры термостата
Port.write(‘\xA1\x00\x00′)

MSB = Port.read() # старший байт
LSB = Port.read() # младший байт

if (MSB !=» and LSB != «):
temperature = ord(LSB) + 256* ord(MSB)
if temperature >= 256:
temperature = temperature — 512
temperature *= 0.5
affichage = str(temperature) +’ °C’
print ‘<p>’+’ Thermostat : Thigh —>’+ affichage +'</p>’

print «<p>Закрытие порта, Port.portstr,'</p>’
Port.close()
Fichier.close()

print «</body></html>»

Чтение температуры (обновляется каждые 10 секунд):
Проверка тем-ры через интернет с помощью CGI-скрипта на Python файл №1Файл резервной копии:

Проверка тем-ры через интернет с помощью CGI-скрипта на Python файл №2#! /usr/bin/python
# -*- coding: utf-8 -*-

# сценарий cgi_сборник установок.py

# Просмотр HTML-формы

print «Content-Type: text/html\n\n»

print «»»<!DOCTYPE html
PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN»
«http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>

<html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»ru» lang=»ru»>

<head>
<meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
<title>Измерение температуры</title>
<meta name=».Автор» content=»Фабрис Сэнсэр»/>
</head>

<body>
<p>Установка температуры (в °C) термостата:</p>

<p>например: 54.5</p>

<form action=»cgi_обработка сборника установок.py» method=»post»>
<p>
Tlow : <input type=»text» name=»tlow» /><br/><br/>
Thigh : <input type=»text» name=»thigh» /><br/><br/>
<input value=»СОХРАНИТЬ» type=»submit» name=»отправить»/>
</p>
</form>

</body>
</html>»»»

Проверка тем-ры через интернет с помощью CGI-скрипта на Python файл №3#! /usr/bin/python
# -*- coding: utf-8 -*-
# (C) Фабрис Сэнсэр
# сценарий cgi_обработка сборника установок.py
# Обработка данных, переданных через HTML-форму
import serial
import cgi
form = «cgi».FieldStorage()

def байт(температура):
temperature =int(temperature*2)
if temperature < 0:
температура += 256
MSB = 1
LSB = temperature
else:
MSB = 0
LSB = temperature
return [MSB,LSB]
print «Content-Type: text/html\n\n»
print «»»<!DOCTYPE html
PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN»
«http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>
<html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»ru» lang=»ru»>
<head>
<meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
<title>Измерение температуры</title>
<meta name=»Автор» content=»Фабрис Сэнсэр»/>
</head>
<body>»»»
Port = serial.Serial()
Port.baudrate = 9600
Port.bytesize=8
Port.parities=0
Port.stopbits=1
Port.xonxoff=0
Port.rtscts=0
Port.timeout=0.1 # в секунду
# Под Windows :
# COM1 -> 0 (или COM1)
# COM2 -> 1 (или COM2)
# Под Linux :
# внимание : разрешение 666
# > chmod 666 /dev/ttyS0
# COM1 -> 0 (или /dev/ttyS0)
# COM2 -> 1 (или /dev/ttyS1)
nomport = 0
try:
int(nomport)
Port.port = int(nomport)
except:
Port.port = nomport
print ‘<p>Открытие порта, ‘Port.portstr,'</p>’
Port.open()
if form.has_key(«tlow»):
Tlow = form[«tlow»].value
try:
Tlow = float(Tlow)
Port.write(‘\x02’+chr(байт(Tlow)[0])+chr(байт(Tlow)[1]))
Port.read()
Port read()
print ‘<p>Tlow : сохранённое значение</p>’
except:
print ‘<p>Tlow : недопустимое Значение</p>’

if form.has_key(«thigh»):
Thigh = form[«thigh»].value
try:
Thigh = float(Thigh)
Port.write(‘\x01’+chr(байт(Thigh)[0])+chr(байт(Thigh)[1]))
Port.read()
Port.read()
print ‘<p>Thigh : сохраненное значение</p>’
except:
print ‘<p>Thigh : недопустимое Значение</p>’

print «<p>Закрытие порта, Port.portstr,'</p>’
Port.close()

print «</body></html>»

Проверка тем-ры через интернет с помощью CGI-скрипта на Python файл №4

10. Приложения для связи RS232 с LINUX

Связь между платой с микроконтроллером и компьютером (оснащенного операционной системой Linux) может установиться просто с консоли команд (командный процессор Linux).Для этого мы будем использовать два сценария bash :

  • DS1620_reception.sh (выполняется первым)
  • DS1620_emission.sh

Эти сценарии были успешно протестированы на многих системах Linux : Ubuntu, Mandriva и Puppy.
Эти сценарии являются базовыми: можно сделать гораздо более мощные!

1 bash-сценарий (файл DS1620_reception.sh) :

#!/bin/bash
# bash-сценарий для Linux
# (C) Фабрис Сэнсэр ; Версия 1.0.1
# Связь RS232 (COM-порт) между компьютером и микроконтроллером PIC

clear

# обнаружение COM-портов компьютера
message=’Команда : dmesg | grep tty’
echo-e «$message\n»

dmesg | grep tty

# настройка порта COM1 :
# 9600 бит/с
# 8 битов данных
# бит четности-нет
# 1 стоп-бит
# управление потоком-нет

message=’Commande: stty-F /dev/ttyS0 9600 cs8-parenb-parodd-cstopb-ixon cread clocal-crtscts-icanon’
echo-e «\n$message\n»

stty-F /dev/ttyS0 9600 cs8-parenb-parodd-cstopb-ixon cread clocal-crtscts-icanon

# отображает все параметры порта COM1
message=’ Commande: stty-a-F /dev/ttyS0′
echo-e «$message\n»

stty-a-F /dev/ttyS0

message=’Во второй консоли, запустить сценарий DS1620_emission.sh’
echo-e «\n*****************************************************************»
echo-e «$message»
echo-e»*****************************************************************\n»

# данные, полученные с компьютера, сохраняются в режиме реального времени в файл
message=’ Commande: cat /dev/ttyS0 > temperature.dat’
echo-e «$message\n»

cat /dev/ttyS0 > temperature.dat

В консоли, выполнение этого сценария bash даёт:

fabrice@imedia2089:~$ ./DS1620_reception.sh
Commande: dmesg | grep tty

[ 0.000000] console [tty0] enabled
[ 0.573305] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.573406] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 0.573739] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.573872] 00:0a: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A

Commande: stty-F /dev/ttyS0 9600 cs8-parenb-parodd-cstopb-ixon кред помощью clocal-crtscts-icanon

Commande: stty-a-F /dev/ttyS0

speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; флеш = ^O; min = 1; time = 0;
-parenb-parodd cs8-hupcl-cstopb cread clocal-crtscts
-ignbrk-brkint-ignpar-parmrk-inpck-istrip-inlcr-igncr-icrnl-ixon-ixoff
-iuclc-ixany-imaxbel-iutf8
-opost-olcuc-ocrnl-onlcr-onocr-onlret-ofill-ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig-icanon iexten echo-echoe-echok-echonl-noflsh-xcase-tostop-echoprt
echoctl echoke

*****************************************************************
Во второй консоли, выполняется сценарий DS1620_emission.sh
*****************************************************************

Commande: cat /dev/ttyS0 > temperature.dat

2 bash-сценарий (файл DS1620_emission.sh) :

#!/bin/bash
# bash-сценарий для Linux
# (C) Фабрис Сэнсэр; Версия 1.0.1
# Связь RS232 (COM-порт) между компьютером и микроконтроллером PIC

clear

message=’В другой консоли, запуск первого сценария DS1620_reception.sh’
echo-e «\n**************************************************************************»
echo-e «$message»
echo-e»**************************************************************************\n»

# бесконечный цикл
# посылает 3 байта (0xAA 0x00 0x00) = ПИК
# повторяет операцию каждые 5 секунд
while [ 1 ]
do
message=’Emission : echo-e-n «\xAA\x00\x00» > /dev/ttyS0′
echo «$message»
echo-e-n «\xAA\x00\x00» > /dev/ttyS0

sleep 5s
# вывод содержимого файла данных, полученного с помощью компьютера (в шестнадцатеричном формате)
echo-e «Прием»
od-t x1 temperature.dat
done

В консоли, выполнение этого сценария bash дает :

fabrice@imedia2089:~$ ./DS1620_emission.sh

**************************************************************************
В другой консоли, исполнение первого сценария DS1620_reception.sh
**************************************************************************

Посылка: echo-e-n «\xAA\x00\x00» > /dev/ttyS0
Приём

0000000 00 32
0000002
Посылка: echo-e-n «\xAA\x00\x00» > /dev/ttyS0
Приём
0000000 00 32 00 32
0000004
Посылка: echo-e-n «\xAA\x00\x00» > /dev/ttyS0
Приём
0000000 00 32 00 32 00 32
0000006
Посылка: echo-e-n «\xAA\x00\x00» > /dev/ttyS0
Приём
0000000 00 32 00 32 00 32 00 33
0000010



Два последних полученных байта — 0x33 0x00, соответствующих температуре +25,5 °C.

11. Проверка температуры через интернет с MySQL

Вам нужен Интернет-хостинг с PHP и базой данных MySQL.У автора статьи хостинг Olympe Network (бесплатный и без рекламы).

11-1. Локальная установка web_temperature.exe

Проверка тем-ры через интернет с SQL №1Это приложение запускается на локальном компьютере, куда подключено устройство для сбора данных о температуре (через порт RS232).

Оно позволяет :

  • просматривать температуру (обновление: 1 секунда)
  • каждые 5 минут, температура сохраняется во внешней базе данных MySQL (через сеть интернет). Для этого используются 3 запроса SQL:
  1. CREATE TABLE IF NOT EXISTS web_temperature1 (ID INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,date date NOT NULL,time time NOT NULL,temperature varchar(20) collate latin1_general_ci NOT NULL) ENGINE = MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
  2. INSERT INTO web_temperature1(ID,date,time,temperature) VALUES (NULL,CURDATE(), CURTIME(), ‘21,5’)
  3. SELECT date,time,temperature FROM web_temperature1 ORDER BY ID DESC LIMIT 0,1

Приложение состоит из двух файлов :

  • web_temperature.exe
  • libmysql.dll

Скачать web_temperature.exe (263 кб)
Скачать libmysql.dll (1,0 Мб)

Исходный код приложения
Это приложение было написано на C++ Borland Builder 5.

Скачать исходный код (222 кб)

Примечание: Для связи с COM-портом (RS232), необходимо установить компонент TComPort (о котором я уже говорил выше).Для связи с базой данных MySQL необходима библиотека C libmysql, которую вы можете свободно скачать с официального сайта www.mysql.com:
Раздел: Downloads
-> mysql-connector-c-noinstall-6.0.2-win32.zip
Чтобы использовать эту библиотеку в C++ Borland Builder 5, вот внешняя ссылка:
Учебник: Использование API MySQL в Borland C++ Builder
Небольшое упущение в этом учебнике: нужно добавить libmysql.lib в проект (Проект -> Добавить в проект -> libmysql.lib)
Полезная ссылка: http://fabrice.sincere.pagesperso-orange.fr/application_builder5/client_mysql/mysql_client_builder.html

11-2. Чтение температуры через интернет: сценарий PHP

В вашем любимом веб-браузере, температура доступна в режиме реального времени на веб-странице в php. Сценарий PHP подключается к базе данных MySQL (через сеть интернет).Он считывает и отображает информацию, ранее записанную локальным приложением (обновление каждые 5 минут).
Скачать исходный код сценария PHP

12. Проверка температуры через интернет с FTP

Вам нужен интернет-хостинг .

12-1. Локальная установка web_temperature_ftp.exe

Проверка тем-ры через интернет с FTP файл №1Это приложение запускается на локальном компьютере, куда подключается устройство для сбора данных о температуре (через порт RS232).

Оно позволяет :

  • просматривать температуру (обновление: 1 секунда)
  • каждые 5 минут, локальный файл (который содержит информацию о дате, времени и температуре), передаётся на веб-сайт по FTP-протоколу (File Transfer Protocol).

Скачать web_temperature_ftp.exe (292 кб)

Это приложение было написано на C++ Borland Builder 5.

Скачать исходный код (15 кб)

12-2. Чтение температуры через интернет

В вашем любимом веб-браузере, температура доступна в реальном времени в URL:

http://fabrice.sincere.pagesperso-orange.fr/web_temperature.txt

13. Список оборудования и деталей

  • программатор для прошивки микроконтроллера PIC 16F628A

Без интерфейса RS232 :

  • 1 буквенно-цифровой ЖК дисплей 2 × 16 с параллельным интерфейсом
  • 3 резистора 10 кОм
  • 1 подстроечный резистор 2,2 кОм ( для регулировки контраста дисплея)
  • 1 цифровой датчик температуры DS1620 (Dallas Semiconductor)
    Примечание : Вы можете заказать бесплатные образцы у фирмы Dallas
  • 1 микроконтроллер PIC 16F628A (корпус PDIP)
    Примечание: Вы можете заказать бесплатные образцы у компании Microchip
  • 1 кварц на 20 МГц (20 МГц обязательно)
  • 1 электролитический конденсатор 100 мкФ (фильтр)
  • 1 электролитический конденсатор 10 мкФ (фильтр)
  • 5 конденсаторов 100 нФ (фильтр)
  • 2 конденсатора по 22 пФ
  • 1 источник непрерывного питания +12 в (или батарейки 9 В)
  • 1 микросхема регулятора напряжения 7805 (корпус ТО220)
  • 2 кнопки (действующих на замыкание)

С интерфейсом RS232: дополнительные компоненты

  • 1 инегральная микросхема MAX233A (интерфейс RS232C <-> TTL/CMOS)
    Примечание: Вы можете заказать бесплатные образцы у компании Maxim
  • 1 разъем SubD, 9 контактов «папа»
  • 1 электролитический конденсатор 1 мкф (фильтр)
  • 1 нуль-модемный кабель («мама» / «мама»)
  • 1 компьютер с COM-портом

14. Печатная плата

Размеры: 62 x 100 мм
Односторонняя.
web_temperature_ftp_code_source Печатная платарисунок №1
Скачать фотошаблон
Примечание: Не забудьте 9–контактный разъём (припаяйте в первую очередь).

15. Прошивка для PIC 16F628A

Исходный код был написан на ассемблере в бесплатной среде MPLAB IDE от Microchip.

Скачать прошивку (.hex) исходный код на ассемблере (.asm)

 Перевод Павла Блинкова (grayling3000) по заказу сайта Меандр

Оригинал статьи

admin

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *