Home
WT Highlight test article
- Информация о материале
- Автор: admin
- Категория: Uncategorised
- Просмотров: 156
<?php
class FileMapper
{
public $DBH;
public function __construct(PDO $DBH)
{
$this->DBH = $DBH;
}
public function getFilebyID($id)
{
$STH = $this->DBH->prepare("SELECT * FROM files WHERE id=:id");
$STH->bindvalue(":id", $id);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_CLASS, 'file');
return $STH->fetch();
}
public function getAllFiles()
{
$STH = $this->DBH->prepare("SELECT * FROM files ORDER BY id DESC LIMIT 100");
$STH->execute();
return $STH->fetchAll(PDO::FETCH_CLASS, "file");
}
public function addFile(File $file)
{
$STH = $this->DBH->prepare("INSERT INTO files (type, name, size, comment, code)
VALUES (:type, :name, :size, :comment, :code)");
$STH->bindvalue(":type", $file->getType());
$STH->bindvalue(":name", $file->getName());
$STH->bindvalue(":size", $file->getSize());
$STH->bindvalue(":comment", $file->getComment());
$STH->bindvalue(":code", $file->getCode());
$STH->execute();
$file->setID($this->DBH->lastInsertId());
}
public function iscodeUsed($code)
{
$STH = $this->DBH->prepare("SELECT * FROM files WHERE code=:code");
$STH->bindValue(":code", $code);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_CLASS, 'file');
return $STH->fetch();
}
}
Test article
- Информация о материале
- Автор: admin
- Категория: Uncategorised
- Просмотров: 1480

Код:
import requests
from bs4 import BeautifulSoup
page = requests.get('https://nvd.nist.gov/vuln/detail/CVE-2019-9639')
soup = BeautifulSoup(page.text, 'html.parser')
vuln_description = soup.select('div.col-lg-9:nth-child(1) > p:nth-child(2)')
print(vuln_description)
I2C Pressure sensor 1MPa
- Информация о материале
- Автор: admin
- Категория: Electronics
- Просмотров: 59
Где купить
https://aliexpress.ru/item/1005007148779919.html?sku_id=12000042558689084

Распиновка проводов
Коричневый (+)
Синий (-)
Белый (SDA)
Чёрный (SCL)
Адрес датчика I2C:
| A7 | A6 | A5 | A4 | A3 | A2 | A1 | W/R |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0/1 |
Согласно сообщениям на форумах адрес датчика 0x7F
Чтение показаний датчика
- Отправляем команду 0x0A в регистр 0x30
- Читаем данные из регистра 0x30. Если бит Sco (3-й бит) = 0, приём данных завершён и их можно считывать. Или ждём с задержкой (~50ms).
- Читаем данные из регистров 0x06 0x07 0x08 0x09 и 0x0A.
Код
// xdb401 pressure sensor, esp32 s3
// don't need pull-up resistor, because they built-in in sensor
// brown - 3.3v, blue - gnd, white - sda, black - scl
#include <Wire.h>
const uint8_t SENSOR_ADDR = 0x7F; // Адрес датчика
const uint8_t SDA_PIN = 8;
const uint8_t SCL_PIN = 9;
float Fullscale_P = 1000.0; // Полный масштаб давления
void setup() {
Serial.begin(115200);
Wire.begin(SDA_PIN, SCL_PIN);
delay(1000);
}
void loop() {
// 1. Отправляем команду 0x0A в регистр 0x30 для запуска измерения
if (!writeRegister(SENSOR_ADDR, 0x30, 0x0A)) {
Serial.println("Ошибка записи команды запуска измерения");
delay(1000);
return;
}
// 2. Ждём завершения измерения, проверяя бит Sco (бит 3) регистра 0x30
bool acquisitionComplete = false;
for (int i = 0; i < 10; i++) { // максимум 10 попыток с задержкой
uint8_t reg30 = 0;
if (!readRegister(SENSOR_ADDR, 0x30, ®30)) {
Serial.println("Ошибка чтения регистра 0x30");
delay(100);
continue;
}
if ((reg30 & 0x08) == 0) { // бит 3 == 0
acquisitionComplete = true;
break;
}
delay(50); // подождать 50 мс и проверить снова
}
if (!acquisitionComplete) {
Serial.println("Измерение не завершено, данные не готовы");
delay(500);
return;
}
// 3. Читаем данные из регистров 0x06-0x0A (5 байт)
uint8_t data[5];
if (!readBytesFromRegister(SENSOR_ADDR, 0x06, data, 5)) {
Serial.println("Ошибка чтения данных давления и температуры");
delay(500);
return;
}
// Обработка давления (3 байта: 0x06, 0x07, 0x08)
float Cal_PData1 = data[0] * 65536.0 + data[1] * 256.0 + data[2];
float Cal_PData2;
if (Cal_PData1 > 8388608) {
Cal_PData2 = (Cal_PData1 - 16777216) / 8388608.0;
} else {
Cal_PData2 = Cal_PData1 / 8388608.0;
}
float Pressure_data = Cal_PData2 * Fullscale_P;
// Обработка температуры (2 байта: 0x09, 0x0A)
float Cal_TData1 = data[3] * 256.0 + data[4];
float Cal_TData2;
if (Cal_TData1 > 32768) {
Cal_TData2 = (Cal_TData1 - 65536) / 256.0;
} else {
Cal_TData2 = Cal_TData1 / 256.0;
}
float Temp_data = Cal_TData2;
// Вывод результатов
Serial.print("Pressure: ");
Serial.print(Pressure_data);
Serial.print(" kPa, Temperature: ");
Serial.print(Temp_data);
Serial.println(" °C");
delay(1000); // пауза 1 секунда
}
// Функция записи одного байта в регистр
bool writeRegister(uint8_t deviceAddress, uint8_t regAddress, uint8_t value) {
Wire.beginTransmission(deviceAddress);
Wire.write(regAddress);
Wire.write(value);
return (Wire.endTransmission() == 0);
}
// Функция чтения одного байта из регистра
bool readRegister(uint8_t deviceAddress, uint8_t regAddress, uint8_t* value) {
Wire.beginTransmission(deviceAddress);
Wire.write(regAddress);
if (Wire.endTransmission(false) != 0) {
return false;
}
if (Wire.requestFrom(deviceAddress, (uint8_t)1) != 1) {
return false;
}
*value = Wire.read();
return true;
}
// Функция чтения нескольких байт из регистра
bool readBytesFromRegister(uint8_t deviceAddress, uint8_t regAddress, uint8_t* buffer, uint8_t length) {
Wire.beginTransmission(deviceAddress);
Wire.write(regAddress);
if (Wire.endTransmission(false) != 0) {
return false;
}
if (Wire.requestFrom(deviceAddress, length) != length) {
return false;
}
for (uint8_t i = 0; i < length; i++) {
buffer[i] = Wire.read();
}
return true;
}