![Үнэхээр сорилт: 5 алхам Үнэхээр сорилт: 5 алхам](https://i.howwhatproduce.com/images/010/image-29457-j.webp)
Агуулгын хүснэгт:
2025 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2025-01-23 15:00
![Image Image](https://i.howwhatproduce.com/images/010/image-29457-2-j.webp)
![](https://i.ytimg.com/vi/PqDvFa4jYaA/hqdefault.jpg)
![Алхам 1: Цахилгаан хэлхээг гагнах Алхам 1: Цахилгаан хэлхээг гагнах](https://i.howwhatproduce.com/images/010/image-29457-3-j.webp)
Орчин үеийн ертөнц нь хүмүүс бие махбодоосоо гарч дижитал орчинд амьдрахыг шаарддаг.
Аль гарч ирж, технологи хөгжихийн хэрээр хүмүүс машинд хэт их итгэж, үүнийг үргэлж зөв гэж итгэдэг.
"Үнэхээр" нь хуурамч худал илрүүлэгч тестийг бий болгох замаар энэхүү хуурамч итгэлийг үгүй хийх зорилготой юм. Хүмүүс үнэхээр үнэхээр ажиллаж байгаа гэдэгт амархан итгэх болно, гэхдээ хуурамч хариулт өгөх нь тэдний технологид итгэх итгэлийг үгүй хийх болно.
Алхам 1: Алхам 1: Цахилгаан хэлхээг гагнах
Учир нь миний бүтээлүүд ганцхан гэрэлтэй тул гагнахад маш хялбар байдаг. Гол асуудал бол эхэндээ би хоёр гэрлийг гагнаж байсан боловч өртөх хэсгийг тэр дор нь хамруулаагүй. Тиймээс хоёр утас салах үед хоорондоо холбоо барина. Богино байна.
Алхам 2: Алхам 2: Кодыг бичнэ үү
p.p1 {зах: 0.0px 0.0px 0.0px 0.0px; шугамын өндөр: 15.0 пиксел; фонт: 12.0px удаа; өнгө: #000000; дэвсгэр өнгө: #ffffff}
p.p2 {зах: 0.0px 0.0px 0.0px 0.0px; шугамын өндөр: 15.0 пиксел; фонт: 12.0px удаа; өнгө: #000000; дэвсгэр өнгө: #ffffff; мин өндөр: 14.0px} span.s1 {фонт-кернинг: байхгүй}
Алхам 2: Кодыг бичнэ үү
/*********************************************************************
Энэ бол манай nRF52 дээр суурилсан Bluefruit LE модулиудын жишээ юм
Өнөөдөр adafruit дэлгүүрээс нэгийг аваарай!
Adafruit нь энэхүү нээлттэй эх кодыг өгөхөд цаг хугацаа, нөөцөө зориулдаг.
Adafruit болон нээлттэй эхийн тоног төхөөрөмжийг худалдан авах замаар дэмжээрэй
Adafruit -ийн бүтээгдэхүүнүүд!
MIT лиценз, дэлгэрэнгүй мэдээллийг LICENSE -ээс шалгана уу
Дээрх бүх текст болон доорх дэлгэцийг оруулах ёстой
аливаа дахин хуваарилалт
*********************************************************************
/ Энэхүү ноорог зургийг NeoPixel удирдлагад ашиглах зориулалттай
// Adafruit -ийн Bluefruit LE Connect мобайл аппликейшн дээрх гадаргуу.
/
/ - Энэхүү эскизийг эмхэтгэн nRF52 өд рүү оруулна уу
// - Bluefruit LE Connect програмыг нээнэ үү
// - NeoPixel хэрэгсэлд шилжих
// - 'connect' товчийг дарж холболт үүсгэнэ
// пикселийн байршлын талаархи мета өгөгдлийг илгээх
// - NeoPixel хэрэгслийг ашиглан төхөөрөмж дээрх пикселүүдийг шинэчилнэ үү
/* ТАЙЛБАР: Энэхүү ноорог нь хамгийн багадаа Adafruit_Neopixel -ийн 1.1.0 хувилбарыг шаарддаг байсан !!! */
#оруулах
#оруулах
#оруулах
NEOPIXEL_VERSION_STRING "Neopixel v2.0" -ийг #тодорхойлох
#тодорхойлох PIN 16 / * NeoPixels -ийг жолоодоход ашигладаг зүү * /
#MAXCOMPONENTS -ийг тодорхойлох 4
uint8_t *pixelBuffer = NULL;
uint8_t өргөн = 0;
uint8_t өндөр = 0;
uint8_t алхам хийх;
uint8_t бүрэлдэхүүн хэсэгValue;
bool нь 400 Гц;
uint8_t бүрэлдэхүүн хэсгүүд = 3; // зөвхөн 3 ба 4 нь хүчин төгөлдөр утга юм
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE үйлчилгээ
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
хүчингүй тохиргоо ()
{
Цуваа.begin (115200);
while (! Цуваа) саатал (10); // уугуул usb бүхий nrf52840 -ийн хувьд
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Bluefruit Connect LE програмыг ашиглан холбогдоно уу");
// Неопикселийг тохируулах
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Дэмжигдсэн утгуудын хувьд bluefruit.h -ийг шалгана уу
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Тогтвортой байхын тулд OTA DFU байгаа бол эхлээд нэмж оруулах ёстой
bledfu.begin ();
// Төхөөрөмжийн мэдээллийн үйлчилгээг тохируулах, эхлүүлэх
bledis.setMan Manufacturer ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// BLE UART үйлчилгээг тохируулж эхлүүлнэ үү
bleuart.begin ();
// Зар сурталчилгаа тохируулж, эхлүүлнэ үү
startAdv ();
}
void startAdv (хүчингүй)
{
// Зар сурталчилгааны багц
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// bleuart 128 битийн uuid оруулах
Bluefruit. Reklam.addService (bleuart);
// Хоёрдогч скан хариулах багц (заавал биш)
// Зар сурталчилгааны багцад 'Нэр' оруулах зай байхгүй тул
Bluefruit. ScanResponse.addName ();
/* Зар сурталчилгаа эхлүүлэх
* - Хэрэв салгагдсан бол авто зар сурталчилгааг идэвхжүүлнэ үү
* - Интервал: хурдан горим = 20 ms, удаан горим = 152.5 ms
* - Хурдан горимын хугацаа 30 секунд байна
* - Завсарлагаанаар эхлэх цаг (0) нь үүрд сурталчлах болно (холбогдох хүртэл)
*
* Зөвлөмж болгож буй зар сурталчилгааны интервалын хувьд
*
*/
Bluefruit. Reklam.restartOnDisconnect (үнэн);
Bluefruit. Reklam.setInterval (32, 244); // 0.625 мс -ийн нэгжээр
Bluefruit. Reklam.setFastTimeout (30); // хурдан горим дахь секундын тоо
Bluefruit. Advertising.start (0); // 0 = n секундын дараа сурталчилгаагаа бүү зогсоо
}
хүчингүй connect_callback (uint16_t conn_handle)
{
// Одоогийн холболтын лавлагаа авах
BLEConnection* холболт = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
холболт-> getPeerName (төвийн_ нэр, хэмжээ (төвийн_ нэр));
Serial.print ("Холбогдсон");
Serial.println (central_name);
Serial.println ( 'Neopixels' табыг сонгоод 'Connect' дээр дараад хөгжилтэй байгаарай);
}
хоосон давталт ()
{
// Цуурай мэдээлэл хүлээн авлаа
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int тушаал = bleuart.read ();
солих (тушаал) {
case 'V': {// Хувилбар авах
commandVersion ();
завсарлага;
}
case 'S': {// Хэмжээ, бүрэлдэхүүн хэсэг, алхамыг тохируулах …
commandSetup ();
завсарлага;
}
кейс 'С': {// Өнгөөр цэвэрлэ
commandClearColor ();
завсарлага;
}
тохиолдол 'B': {// Brightness -ийг тохируулна уу
commandSetBrightness ();
завсарлага;
}
тохиолдолд 'P': {// Pixel тохируулна уу
commandSetPixel ();
завсарлага;
}
case 'I': {// Шинэ зураг авах
commandImage ();
завсарлага;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
for (int j = 0; j <өндөр; j ++)
{
for (int i = 0; i <өргөн; i ++) {
хэрэв (бүрэлдэхүүн хэсэг == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
өөр {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= бүрэлдэхүүн хэсгүүд;
pixelIndex ++;
}
pixelIndex += алхам - өргөн; // PixelIndex -ийг дараагийн эгнээнд шилжүүлэх (алхамыг харгалзан үзнэ үү)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Command: Version check"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Command: Setup"));
өргөн = bleuart.read ();
өндөр = bleuart.read ();
алхам = bleuart.read ();
бүрэлдэхүүн хэсэгValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = бүрэлдэхүүн хэсэгValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
бүрэлдэхүүн хэсэг = (componentValue == NEO_RGB || бүрэлдэхүүн хэсэгValue == NEO_RBG || бүрэлдэхүүн хэсгүүдValue == NEO_GRB || бүрэлдэхүүн хэсэгүүд 3: 4;
Serial.printf ("\ tsize: %dx %d / n", өргөн, өндөр);
Serial.printf ("\ tstride: %d / n", алхам);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tcomponents: %d / n", бүрэлдэхүүн хэсгүүд);
if (pixelBuffer! = NULL) {
устгах pixelBuffer;
}
uint32_t хэмжээ = өргөн*өндөр;
pixelBuffer = шинэ uint8_t [size*бүрэлдэхүүн хэсэг];
neopixel.updateLength (хэмжээ);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Дууссан
sendResponse ("OK");
}
void commandSetBrightness () {
Serial.println (F ("Command: SetBrightness"));
// Унших утга
uint8_t тод байдал = bleuart.read ();
// Гэрэлтүүлгийг тохируулна уу
neopixel.setBrightness (тод байдал);
// Пикселийг шинэчлэх
swapBuffers ();
// Дууссан
sendResponse ("OK");
}
void commandClearColor () {
Serial.println (F ("Command: ClearColor"));
// Өнгө уншина уу
uint8_t өнгө [MAXCOMPONENTS];
for (int j = 0; j <бүрэлдэхүүн хэсэг;) {
if (bleuart.available ()) {
өнгө [j] = bleuart.read ();
j ++;
}
}
// Бүх LED -ийг өнгө болгон тохируулна уу
int хэмжээ = өргөн * өндөр;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <size; i ++) {
for (int j = 0; j <бүрэлдэхүүн; j ++) {
*base_addr = өнгө [j];
base_addr ++;
}
}
// Буферийг солих
Serial.println (F ("ClearColor дууссан"));
swapBuffers ();
хэрэв (бүрэлдэхүүн хэсэг == 3) {
Serial.printf ("\ tclear (%d, %d, %d) n", өнгө [0], өнгө [1], өнгө [2]);
}
өөр {
Serial.printf ("\ tclear (%d, %d, %d, %d) n", өнгө [0], өнгө [1], өнгө [2], өнгө [3]);
}
// Дууссан
sendResponse ("OK");
}
хүчингүй командSetPixel () {
Serial.println (F ("Command: SetPixel"));
// Албан тушаалыг уншина уу
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Өнгийг уншина уу
uint32_t pixelOffset = y*өргөн+x;
uint32_t pixelDataOffset = pixelOffset*бүрэлдэхүүн хэсгүүд;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
for (int j = 0; j <бүрэлдэхүүн хэсэг;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Өнгийг тохируулах
uint32_t neopixelIndex = y*алхам+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t өнгө;
хэрэв (бүрэлдэхүүн хэсэг == 3) {
color = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
өөр {
color = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2), *(pixelBufferPointer+3));
Serial.printf ("\ tcolor (%d, %d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2), *(pixelBufferPointer+3));
}
neopixel.setPixelColor (neopixelIndex, өнгө);
neopixel.show ();
// Дууссан
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Тушаал: Зураг %dx %d, %d, %d / n", өргөн, өндөр, бүрэлдэхүүн хэсэг, алхам);
// Шинэ пиксел буфер хүлээн авах
int хэмжээ = өргөн * өндөр;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <size; i ++) {
for (int j = 0; j <бүрэлдэхүүн хэсэг;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
хэрэв (бүрэлдэхүүн хэсэг == 3) {
uint32_t index = i*бүрэлдэхүүн хэсгүүд;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [index], pixelBuffer [index+1], pixelBuffer [index+2]);
}
*/
}
// Буферийг солих
Serial.println (F ("Зураг хүлээн авсан"));
swapBuffers ();
// Дууссан
sendResponse ("OK");
}
хүчингүй sendResponse (char const *хариулт) {
Serial.printf ("Хариу илгээх: %s / n", хариу);
bleuart.write (хариу, strlen (хариу)*sizeof (char));
}
Алхам 3: Алхам 3: Гэрлийн шил худалдаж авах
![Алхам 3: Гэрлийн шил худалдаж авах Алхам 3: Гэрлийн шил худалдаж авах](https://i.howwhatproduce.com/images/010/image-29457-4-j.webp)
![Алхам 3: Гэрлийн шил худалдаж авах Алхам 3: Гэрлийн шил худалдаж авах](https://i.howwhatproduce.com/images/010/image-29457-5-j.webp)
Алхам 4: Алхам 4: Бүгдийг хамтад нь татах
Зөвлөмж болгож буй:
Үнэхээр хямд даралтын мэдрэгчийг хэрхэн яаж хийх вэ: 6 алхам (зурагтай)
![Үнэхээр хямд даралтын мэдрэгчийг хэрхэн яаж хийх вэ: 6 алхам (зурагтай) Үнэхээр хямд даралтын мэдрэгчийг хэрхэн яаж хийх вэ: 6 алхам (зурагтай)](https://i.howwhatproduce.com/images/002/image-4033-37-j.webp)
Үнэхээр хямд даралтын мэдрэгчийг хэрхэн яаж хийх вэ: Би сүүлийн үед гэр ахуйн нийтлэг эд зүйлсээс унтраалга хийх дуртай болсон бөгөөд хэвтэж байсан хэдэн хөвөнгөөрөө өөрийн даралтын мэдрэгчийг төсөвтөө зориулж хийхээр шийдсэн. Энэ нь төсвийн даралт мэдрэгчийн бусад хувилбараас ялгаатай шалтгаан нь
Үнэхээр WiFi өргөтгөл: 5 алхам
![Үнэхээр WiFi өргөтгөл: 5 алхам Үнэхээр WiFi өргөтгөл: 5 алхам](https://i.howwhatproduce.com/images/002/image-4229-16-j.webp)
Үнэхээр WiFi Extender: ТанилцуулгаTruly WiFi Extender бол Raspberry Pi Zero W. дээр суурилсан WiFi давталт юм.Энэ нь хямд үнэтэй (10USD-аас доош) болон маш их тохируулагддаг програм хангамжийг хослуулсан арилжааны WiFi давтагчийн сайн хувилбар юм. Энэ нь мөн зар хаах зарим шийдлийг ажиллуулж чадна
Python дээр үнэхээр гайхалтай матриц хий!: 6 алхам
![Python дээр үнэхээр гайхалтай матриц хий!: 6 алхам Python дээр үнэхээр гайхалтай матриц хий!: 6 алхам](https://i.howwhatproduce.com/images/006/image-16561-j.webp)
Python дээр үнэхээр гайхалтай матриц хий !: Сайн уу залуусаа! Энэхүү зааварчилгаа нь Python дээр матриц хэрхэн хийхийг танд заах болно. Ихэвчлэн хүмүүс Багцад матриц хийх нь амархан байдаг. Гэхдээ энэ удаад би хүчирхэг компьютерийн хэл дээр хэрхэн матриц хийхийг танд үзүүлэх болно
Үнэхээр үнэхээр хялбар USB мотор!: 3 алхам
![Үнэхээр үнэхээр хялбар USB мотор!: 3 алхам Үнэхээр үнэхээр хялбар USB мотор!: 3 алхам](https://i.howwhatproduce.com/images/005/image-12796-19-j.webp)
Үнэхээр үнэхээр хялбар USB мотор!: Эцэст нь миний 2 дахь заавар !!! Энэ бол танд эсвэл таны компьютерт зориулсан фен бөгөөд ямар ч боломжтой USB портоор ажилладаг. Би үүнийг электроникийн чиглэлээр мэргэшсэн хүмүүст хүртэл зөвлөж байна. Энэ нь хялбар бөгөөд хөгжилтэй тул та таван мини хийх боломжтой !!! БОДИТ
GIMP -ийг ашиглан хүмүүсийг/хүн/амьтан/роботыг үнэхээр дажгүй/тод дулааны хараа (таны сонгосон өнгө) мэт харагдуулах үнэхээр энгийн/хялбар/төвөгтэй биш арга: 4 алхам
![GIMP -ийг ашиглан хүмүүсийг/хүн/амьтан/роботыг үнэхээр дажгүй/тод дулааны хараа (таны сонгосон өнгө) мэт харагдуулах үнэхээр энгийн/хялбар/төвөгтэй биш арга: 4 алхам GIMP -ийг ашиглан хүмүүсийг/хүн/амьтан/роботыг үнэхээр дажгүй/тод дулааны хараа (таны сонгосон өнгө) мэт харагдуулах үнэхээр энгийн/хялбар/төвөгтэй биш арга: 4 алхам](https://i.howwhatproduce.com/images/005/image-14508-25-j.webp)
GIMP -ийг ашиглан хүмүүсийг/хүн/амьтан/роботыг үнэхээр дажгүй/тод дулааны хараа (таны сонгосон өнгө) мэт харагдуулах үнэхээр энгийн/хялбар/төвөгтэй биш арга: … … гарчгийг уншина уу