uniapp使用藍牙,usb,局域網,打印機打印

使用流程(支持安卓和iOS)

引入SDK

引入原生插件包地址如下
https://github.com/oldfive20250214/UniPrinterDemo

連接設備

安卓支持經典藍牙、ble藍牙、usb、局域網(參考API)

iOS支持ble藍牙、局域網(參考API)

拼接模版

聲明對象

const printer = uni.requireNativePlugin(“Printer”)

tspl模版用例1(打印常用指令)

printer.addSize({"width":75,"height":135});
printer.addCls();
printer.addDirection({"n":0,"m":0});
printer.addGap({"m":2,"n":0});
printer.addText({"x":50,"y":50,"font":"TSS16.BF2","rotate":0,"xMultiple":1,"yMultiple":1,"alignment":0,"content":"16號字體"});
printer.addBox({"x":20,"y":20,"x_end":500,"y_end":800,"thickness":2,"radius":0});
printer.addText({"x":50,"y":100,"font":"TSS24.BF2","rotate":0,"xMultiple":1,"yMultiple":1,"alignment":0,"content":"24號字體"});
printer.addText({"x":250,"y":50,"font":"TSS16.BF2","rotate":0,"xMultiple":1,"yMultiple":1,"alignment":0,"content":"16號字體"});
printer.addReverse({"x":240,"y":40,"width":200,"height":40});
printer.addBar({"x":50,"y":200,"width":300,"height":3});
printer.addBarcode({"x":50,"y":210,"codeType":"128","height":100,"style":1,"rotation":0,"narrow":2,"wide":2,"alignment":0,"content":"test123456"});
printer.addQRCode({"x":50,"y":350,"eccLevel":"L","cellWidth":7,"mode":"M","rotate":0,"model":"M1","mask":"S3","content":"test123456"})
printer.addPrint({"m":1,"n":1});

tspl模版用例2(打印圖片)

printer.addSize({"width":75,"height":135});
printer.addCls();
printer.addDirection({"n":0,"m":0});
printer.addGap({"m":2,"n":0});
printer.addBitmap({"x":0,"y":0,"mode":0,"base64":base64});
printer.addPrint({"m":1,"n":1});

cpcl模版用例1(打印常用指令)

printer.cpcl_addInit({"height":600,"copys":1});
printer.cpcl_addUnit("IN-DOTS");
printer.cpcl_addWidth(600);
printer.cpcl_setMag({"w":1,"h":1});
printer.cpcl_addText({"cmd":"T","font":"1","size":"0","x":50,"y":150,"data":"24*24字體"});
printer.cpcl_addText({"cmd":"T","font":"4","size":"0","x":50,"y":200,"data":"32*32字體"});
printer.cpcl_setMag({"w":2,"h":1});
printer.cpcl_addText({"cmd":"T","font":"4","size":"0","x":50,"y":250,"data":"48*24字體"});
printer.cpcl_setMag({"w":3,"h":3});
printer.cpcl_addText({"cmd":"T","font":"4","size":"0","x":50,"y":300,"data":"72*72字體"});
printer.cpcl_setMag({"w":1,"h":1});
printer.cpcl_addLine({"startx":50,"starty":380,"endx":250,"endy":380,"width":5});
printer.cpcl_addBarcode({"isvb":false,"codetype":"128","width":1,"radio":"1","height":50,"x":50,"y":390,"data":"test123456"});
printer.cpcl_addQrcode({"isVQ":false,"codetype":"QR","x":50,"y":450,"m":2,"n":6,"data1":"M","data2":"A","data3":"test123456"});
printer.cpcl_form();
printer.cpcl_print();

cpcl模版用例2(打印圖片)

printer.cpcl_addInit({"height":600,"copys":1});
printer.cpcl_addUnit("IN-DOTS");
printer.cpcl_addWidth(600);
printer.cpcl_addBitmap({"x":0,"y":0,"mode":0,"base64":base64});
printer.cpcl_form();
printer.cpcl_print();

esc模版用例1(打印常用指令)

printer.esc_addInit();
printer.esc_addAlign(1);
printer.esc_setCharSize({"width":0,"height":0});
printer.esc_addText("打印機居中\r\n");
printer.esc_addAlign(0);
printer.esc_setCharSize({"width":1,"height":1});
printer.esc_addText("打印機放大1-1\r\n");
printer.esc_setCharSize({"width":2,"height":2});
printer.esc_addText("打印機放大2-2\r\n");
printer.esc_setCharSize({"width":0,"height":0});
printer.esc_addLocation(10);
printer.esc_addText("text1");
printer.esc_addLocation(257);
printer.esc_addText("text2\r\n\r\n");
printer.esc_addText("width2條碼寬度36mm\r\n");
printer.esc_barCode({"width":2,"height":80,"font":1,"loc":2,"m":73,"data":"width2abcd"});
printer.esc_addText("\r\n");
printer.esc_addText("width3條碼寬度54mm\r\n");
printer.esc_barCode({"width":3,"height":80,"font":1,"loc":2,"m":73,"data":"width3abcd"});
printer.esc_addText("\r\n");
printer.esc_print();
printer.esc_addText("SIZE-1二維碼寬度3mm\r\n");
printer.esc_qrCode({"size":1,"data":"test123456"});
printer.esc_addText("\r\nSIZE-2-二維碼寬度4mm\r\n");
printer.esc_qrCode({"size":2,"data":"test123456"});
printer.esc_addText("\r\nSIZE-3-二維碼寬度7mm\r\n");
printer.esc_qrCode({"size":3,"data":"test123456"});
printer.esc_addText("\r\nSIZE-4-二維碼寬度10mm\r\n");
printer.esc_qrCode({"size":4,"data":"test123456"});
printer.esc_addText("\r\nSIZE-5-二維碼寬度13mm\r\n");
printer.esc_qrCode({"size":5,"data":"test123456"});
printer.esc_addText("\r\nSIZE-6-二維碼寬度16mm\r\n");
printer.esc_qrCode({"size":6,"data":"test123456"});
printer.esc_addText("\r\nSIZE-7-二維碼寬度18mm\r\n");
printer.esc_qrCode({"size":7,"data":"test123456"});
printer.esc_addText("\r\nSIZE-8-二維碼寬度21mm\r\n");
printer.esc_qrCode({"size":8,"data":"test123456"});
printer.esc_print();
printer.esc_feed(5);

esc模版用例2(打印圖片)

printer.esc_addInit();
printer.esc_addBitmap({"mode":0,"base64":base64});
printer.esc_feed(5);

開始打印

安卓支持經典藍牙、ble藍牙、usb、局域網(參考API)

iOS支持ble藍牙、局域網(參考API)

安卓經典藍牙API

打開藍牙

printer.spp_openBluetoothAdapter(result => {console.log(result);});

掃描藍牙

printer.spp_startBluetoothDevicesDiscovery(result => {console.log(result);});

連接藍牙

printer.spp_getConnectDevice({"address":adress},result => {
console.log(result);
});

藍牙寫入

拿到數據后再寫入拿到的數據

//獲取sdk生成的模版數據
printer.get_printData({},result => {var obj = JSON.parse(result);console.log(obj.data);console.log(obj.data.base64);
});
//將寫入模版數據的base64
printer.spp_writeData({"base64":base64},result => {console.log(result);
});

拼接好模版后直接寫入

printer.spp_writeKmPrinterData(result => {console.log(result);});

停止藍牙掃描

printer.spp_stopBluetoothDevicesDiscovery(result => {console.log(result);});

關閉藍牙

printer.spp_closeBluetoothAdapter(result => {console.log(result);});

藍牙連接狀態

printer.spp_isConnectClassicBT({"address":address},result => {console.log(result);});

低功耗藍牙API(支持安卓和iOS)

打開藍牙


printer.ble_openBluetoothAdapter(result => {console.log(result);});

掃描藍牙

printer.ble_startBluetoothDevicesDiscovery(result => {console.log(result);});

連接藍牙


printer.ble_getConnectDevice({"address":address},result => {console.log(result);});

藍牙寫入數據

拿到數據后再寫入拿到的數據

//獲取sdk生成的模版數據
printer.get_printData({},result => {var obj = JSON.parse(result);console.log(obj.data);console.log(obj.data.base64);
});
//將寫入模版數據的base64
printer.ble_writeData({"base64":base64},result => {console.log(result);
});

停止藍牙掃描

printer.ble_stopBluetoothDevicesDiscovery(result => {console.log(result);});

關閉藍牙

printer.ble_closeBluetoothAdapter(result => {console.log(result);});

藍牙連接狀態

/** 狀態對應以下數字* int STATE_CONNECTED = 2;* int STATE_CONNECTING = 1;* int STATE_DISCONNECTED = 0;* int STATE_DISCONNECTING = 3;*/
printer.ble_connectState(result => {console.log(result);});

安卓usb打印API

打開usb

printer.usb_openUsb(result => {console.log(result);});

掃描usb


printer.usb_starUsbDevicesDiscovery(result => {console.log(result);});

連接usb


printer.usb_usbConnect({"pid":pid,"vid":vid},result => {console.log(result);});

usb寫入數據

拿到數據后再寫入拿到的數據

//獲取sdk生成的模版數據
printer.get_printData({},result => {var obj = JSON.parse(result);console.log(obj.data);console.log(obj.data.base64);
});
//將寫入模版數據的base64
printer.usb_writeData({"base64":base64},result => {console.log(result);
});

usb讀取數據


printer.usb_read(result => {console.log(result);});

關閉usb連接

printer.usb_close(result => {console.log(result);});

局域網打印API(支持安卓和iOS)

連接打印機

局域網打印需要手機和打印機在同一個局域網內,手機去連接打印機的ip地址和端口

printer.net_connectScoket({"host":host,"port":port},result => {console.log(result);
});

發送數據

拿到數據后再寫入拿到的數據

//獲取sdk生成的模版數據
printer.get_printData({},result => {var obj = JSON.parse(result);console.log(obj.data);console.log(obj.data.base64);
});
//將寫入模版數據的base64
printer.net_writeData({"base64":base64},result => {console.log(result);
});

斷開連接

printer.net_closeScoket(result => {console.log(result);});

TSPL指令API(支持安卓和iOS)

指定畫板版寬高

/*** 設置打印模版寬高* @param width 打印寬度單位 mm int* @param height 打印高度 mm int* @return*/
addSize({"width":width,"height":height})

清空打印機畫板緩存

/*** 清空打印機畫板緩存* @return*/
addCls()

指定打印濃度

/*** 指定打印濃度* @param n  范圍1-15 String* @return*/
addDensity(n)

指定打印速度

/*** 指定打印速度* @param n  范圍1-8 String* @return*/
addSpeed(n)

生成文本指令

/*** 生成TEXT指令* @param x 起始x坐標 int* @param y 起始y坐標 int* @param font 字體名稱 String* @param rotate 旋轉角度 int* @param xMultiple x倍數 int* @param yMultiple y倍數 int* @param alignment 對齊方式 默認0 int* @param content 打印內容 String* @return*/addText({"x":x,"y":y,"font":font,"rotate":rotate,"xMultiple": xMultiple,"yMultiple":yMultiple,"alignment":alignment,"content":content})

生成文本塊

/*** TEXT模塊 支持換行* @param x 起始x坐標 int* @param y 起始y坐標 int* @param width  寬度,單位是點 int* @param height 高度,單位是點 int* @param font 字體名稱 int* @param rotate 旋轉角度 int* @param xMultiple x倍數 int* @param yMultiple y倍數 int* @param lineSpace 行間距 int* @param alignment 對齊 int* @param content 內容 String* @return*/
public KmPrinter crtiBlock({"x":x,"y":y,"width":width,"height":height,"font":font,"rotate":rotate,"xMultiple":xMultiple,"yMultiple":yMultiple,"lineSpace":lineSpace,"alignment":alignment,"content":content})

設置黑反打印區域

/*** 設置黑反打印區域* @param x 起點x* @param y 地點y* @param width 寬* @param height 高* @return*/
addReverse({int x, int y, int width, int height}) 

生成邊框指令

/*** 生成邊框指令* @param x x坐標起點* @param y y坐標起點* @param x_end x坐標結束點* @param y_end y坐標結束點* @param thickness 線條厚度* @param radius 邊框弧度* @return*/
addBox({int x, int y, int x_end, int y_end, int thickness, int radius}) 

生成線條指令

/*** 生成線條指令* @param x 起始x坐標* @param y 起始y坐標* @param width 寬度* @param height 高度* @return*/
addBar({int x, int y, int width, int height})

生成條碼指令

/*** 生成條碼指令* @param x x坐標* @param y y坐標* @param codeType 條碼類型* @param height 條碼高度* @param style 文字樣式*                  0:不可見*                  1:可見居左*                  2:可見居中*                  3:可見居右* @param rotation 旋轉角度* @param narrow 窄條寬度* @param wide 寬條長度* @param alignment 對齊方式* @param content 條碼內容* @return*/
addBarcode({int x, int y, String codeType, int height, int style, int rotation, int narrow, int wide, int alignment, String content})

生成二維碼指令

/*** 生成二維碼指令* @param x 起始x坐標* @param y 起始y坐標* @param eccLevel  糾錯等級 {7,15,25,30}* @param cellWidth 碼元寬度[1-10]* @param mode  A:自動 M:手動* @param rotate 旋轉角度* @param model  條碼版本* M1:(默認),原始版本* M2:增強版* @param mask 掩膜版的種類,控制二維碼的樣式 S[0-8] 默認為S7* @param content 二維碼內容* @return*/
addQRCode({int x, int y, String eccLevel, int cellWidth, String mode, int rotate, String model, String mask, String content})

生成圖片指令

/*** 生成圖片指令* @param x 圖片x坐標* @param y 圖片y坐標* @param mode 圖片打印類型 0默認,正常打印  3,zlib壓縮  4,zlib反白壓縮* @param base64 圖片的base64* @return*/
addBitmap({int x, int y, int mode, String base64})

打印模版指令

/*** 打印模版* @param m 指定要打印多少套標簽。* @param n 指定每個特定標簽集應該打印多少份副本* @return*/
addPrint({int m, int n})

CPCL指令API(支持安卓和iOS)

新建打印模版

/*** 新建打印模版* @param height 打印模版高度* @param copys  打印份數* @return*/
cpcl_addInit({int height, int copys})

設置單位

/*** 設置單位* @param unit IN-INCHES 度量單位英寸*  IN-CENTIMETERS 度量單位厘米*  IN-MILLIMETERS 度量單位毫米*  IN-DOTS 度量單位為點* @return*/
cpcl_addUnit(String unit)

設置模版寬度

/*** 設置打印模版寬度* @param width* @return*/
cpcl_addWidth(int width)

設置字體寬高倍數

/*** 設置字體寬高倍數* @param w 寬度 1-3 1到3倍* @param h 高度 1-3 1到3倍* @return*/
cpcl_setMag({int w, int h})

文本指令

/*** 文本指令* @param cmd 指令類型 (逆時針旋轉角度) 默認不旋轉* TEXT(或T)* TEXT90(或 T90)* TEXT180(或 T180)* TEXT270(或 T270)* @param font 0-6(根據打印機文檔設置)* @param size 0-6(根據打印機文檔設置)* @param x x坐標* @param y y坐標* @param data 打印數據* @return*/
cpcl_addText({String cmd, String font, String size, int x, int y, String data})

線條指令

/*** 線條指令* @param startx 起點x坐標* @param starty 起點y坐標* @param endx  終點x坐標* @param endy 終點y坐標* @param width 線條寬度* @return*/
cpcl_addLine({int startx, int starty, int endx, int endy, int width})

黑反打印區域

/*** 黑反打印區域* @param startx 起點x坐標* @param starty 起點y坐標* @param endx 終點x坐標* @param endy 終點y坐標* @param width 黑反區域寬度* @return*/
cpcl_addReverse({int startx, int starty, int endx, int endy, int width})

條碼指令

/*** 條碼指令* @param isvb 0,1 默認0* BARCODE(B):橫向打印條形碼。* VBARCODE(VB) :縱向打印條形碼* @param codetype 條碼類型 默認 128* UPC-A: UPCA、UPCA2、UPCA5* UPC-E: UPCE、UPCE2、UPCE5* EAN/JAN-13: EAN13、EAN132、EAN135* EAN/JAN-8: EAN8、EAN82、EAN 85* Code 39: 39、39C、F39、F39C* Code 93/Ext.93: 93* Interleaved 2 of 5: I2OF5* Interleaved 2 of 5(帶checksum):I2OF5C* German Post Code: I2OF5G* Code 128(自動): 128* UCC EAN 128: UCCEAN128* Codabar: CODABAR、CODABAR16* MSI/Plessy: MSI、MSI10、MSI1010、MSI1110* Postnet: POSTNET* FIM: FIM* @param width 窄條單位寬度 默認1* @param radio 寬條與窄條單位比例 默認1* @param height 條碼單位高度* @param x x坐標* @param y y坐標* @param data 條碼數據* @return*/
cpcl_addBarcode({boolean isvb, String codetype, int width, String radio, int height, int x, int y, String data})

二維碼指令

/***  二維碼指令* @param isVQ isVQ 是否縱向* @param codetype 默認QR* @param x x坐標* @param y y坐標* @param m  選項是 1 或 2。QR Code Model 1 是原始?規范,2增強版 默認1* @param n 模塊單位寬度 1-32 默認6* @param data1 糾錯等級 H/極高可高級別 Q/高可靠級別 M/標準級別 L/高密度級別 默認M* @param data2 字符模式 N數字 A字母數字 默認 A* @param data3 二維碼內容 二維碼內容* @return*/
cpcl_addQrcode({boolean isVQ, String codetype, int x, int y, int m, int n, String data1, String data2, String data3})

圖片指令

/*** 圖片指令* @param x* @param y* @param mode 0:CG指令模式 1:EG指令模式 3:CG指令壓縮模式* @param base64 圖片的base64 * @return*/
cpcl_addBitmap({int x, int y,int mode, String base64})

打印機在一頁打印結束后切換至下一頁頂部

/*** 打印機在一頁打印結束后切換至下一頁頂部* @return*/
cpcl_form()

打印模版

/*** 打印模版* @return*/
cpcl_print()

反向出紙打印模版

/*** 反向出紙打印模版* @return*/
cpcl_poprint()

ESC指令API(支持安卓和iOS)

打印機初始化

/*** 打印機初始化* @return*/
esc_addInit()

設置絕對位置

/*** 設置絕對位置* @param n 單位dot* @return*/
esc_addLocation(int n)

文本指令

/*** 文本指令* @param text* @return*/
esc_addText(String text)

對齊方式

/*** 對齊方式* @param align 0左對齊 1居中 2右對齊* @return*/
esc_addAlign(int align)

設置字符倍寬倍高

/*** 設置字符倍寬倍高* @param width 0-7 分別是1-8倍 默認0正常* @param height 0-7 分別是1-8倍 默認0正常* @return*/
esc_setCharSize({int width, int height})

打印條碼

/*** 打印條碼* @param width 條碼寬度 2 ≤ n ≤ 6* @param height 條碼高度 1 ≤ height ≤ 255* @param font 條碼字體 0,48:標準 ASCII 碼字符 (12 × 24) 1,49:壓縮 ASCII 碼字符 (9 × 17)* @param loc 條碼位置顯示0, 48:不打印 1, 49:條碼上方 2, 50:條碼下方 3, 51:條碼上、下方都打印* @param m 條碼類型 0 ≤ m ≤ 6 65 ≤ m ≤ 73 具體用法參考文檔* @param data 條碼數據* @return*/
esc_barCode({int width, int height, int font, int loc, int m, String data})

打印二維碼

/*** 打印二維碼* @param size 二維碼大小 1-15* @param data 二維碼數據* @return*/
esc_qrCode({int size, String data})

打印圖片

/*** 打印圖片* @param mode 默認0* @param base64 圖片的base64* @return*/
esc_addBitmap({int mode, String base64})

打印并走紙多行

/*** 打印并走紙多行* @param lines 1-255 走紙的行數* @return*/
esc_feed(int lines)

打印并走紙一行

/*** 打印并走紙一行* @return*/
esc_print()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72775.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72775.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jmeter進行http接口測試詳解

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快 本文主要針對http接口進行測試,使用 jmeter工具實現。 Jmeter工具設計之初是用于做性能測試的,它在實現對各種接口的調用方面已經做的比較…

力扣35.搜索插入位置-二分查找

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:# 初始化左右指針left, right 0, len(nums) - 1# 當左指針小于等于右指針時&#xff0c;繼續循環while left < right:# 計算中間位置mid (left right) // 2# 如果中間元素等于目標值&…

為AI聊天工具添加一個知識系統 之133 詳細設計之74通用編程語言 之4 架構及其核心

本篇繼續討論 通用編程語言。 說明&#xff1a;本階段的所有討論都是圍繞這一主題展開的&#xff0c;但前面的討論分成了三個大部分&#xff08;后面列出了這一段的討論題目的歸屬關系&#xff09;-區別distinguish&#xff08;各別&#xff09;&#xff1a; 文化和習俗。知識…

PPT 技能:巧用 “節” 功能,讓演示文稿更有序

在制作PPT時&#xff0c;你是否遇到過這樣的情況&#xff1a;幻燈片越來越多&#xff0c;內容越來越雜&#xff0c;找某一頁內容時翻得眼花繚亂&#xff1f;尤其是在處理大型PPT文件時&#xff0c;如果沒有合理的結構&#xff0c;編輯和調整都會變得非常麻煩。這時候&#xff0…

劉火良 FreeRTOS內核實現與應用之1——列表學習

重要數據 節點的命名都以_ITEM后綴進行&#xff0c;鏈表取消了后綴&#xff0c;直接LIST 普通的節點數據類型 /* 節點結構體定義 */ struct xLIST_ITEM { TickType_t xItemValue; /* 輔助值&#xff0c;用于幫助節點做順序排列 */ struct xLIST_I…

Uniapp項目運行到微信小程序、H5、APP等多個平臺教程

摘要&#xff1a;Uniapp作為一款基于Vue.js的跨平臺開發框架&#xff0c;支持“一次開發&#xff0c;多端部署”。本文將手把手教你如何將Uniapp項目運行到微信小程序、H5、APP等多個平臺&#xff0c;并解析常見問題。 一、環境準備 在開始前&#xff0c;請確保已安裝以下工具…

100天精通Python(爬蟲篇)——第115天:爬蟲在線小工具_Curl轉python爬蟲代碼工具(快速構建初始爬蟲代碼)

文章目錄 一、curl是什么&#xff1f;二、爬蟲在線小工具&#xff08;牛逼puls&#xff09;三、實戰操作 一、curl是什么&#xff1f; 基本概念&#xff1a;curl 支持多種協議&#xff0c;如 HTTP、HTTPS、FTP、SFTP 等&#xff0c;可用于從服務器獲取數據或向服務器發送數據&a…

[內網安全] Windows 域認證 — Kerberos 協議認證

&#x1f31f;想系統化學習內網滲透&#xff1f;看看這個&#xff1a;[內網安全] 內網滲透 - 學習手冊-CSDN博客 0x01&#xff1a;Kerberos 協議簡介 Kerberos 是一種網絡認證協議&#xff0c;其設計目標是通過密鑰系統為客戶機 / 服務器應用程序提供強大的認證服務。該認證過…

PyTorch中的損失函數:F.nll_loss 與 nn.CrossEntropyLoss

文章目錄 背景介紹F.nll_loss什么是負對數似然損失&#xff1f;應用場景 nn.CrossEntropyLoss簡化工作流程內部機制 區別與聯系 背景介紹 無論是圖像分類、文本分類還是其他類型的分類任務&#xff0c;交叉熵損失&#xff08;Cross Entropy Loss&#xff09;都是最常用的一種損…

案例1_3:流水燈

文章目錄 文章介紹原理圖&#xff08;同案例1_2&#xff09;代碼效果圖 文章介紹 原理圖&#xff08;同案例1_2&#xff09; 代碼 #include <reg51.h> // 包含頭文件void delay(unsigned int time) {unsigned int i, j;for (i 0; i < time; i)for (j 0; j < 1…

基于物聯網技術的電動車防盜系統設計(論文+源碼)

1總體設計 本課題為基于物聯網技術的電動車防盜系統&#xff0c;在此將整個系統架構設計如圖2.1所示&#xff0c;其采用STM32F103單片機為控制器&#xff0c;通過NEO-6M實現GPS定位功能&#xff0c;通過紅外傳感器檢測電瓶是否離開位&#xff0c;通過Air202 NBIOT模塊將當前的數…

學習知識的心理和方法雜記-02

本文簡單記錄下我個人對大腦學習模式的認識。 人腦的基本能力是什么&#xff1f; 接收輸入的能力。語言和聲音 視覺圖像 觸覺 嗅覺 味覺等。 存儲能力。人腦存儲能力背后的物理化學結構我們人類目前還無法完全認知&#xff0c;但是存儲的目標物一定是人可以通過五官獲得的形…

國產化替換案例:CACTER郵件網關為Groupwise系統加固郵件安全防線

電子郵件作為企業信息流轉的命脈&#xff0c;承載著商業機密與客戶數據。然而&#xff0c;網絡攻擊手段日益復雜&#xff0c;釣魚郵件等威脅正快速侵蝕企業安全防線。據《2024年第四季度企業郵箱安全性研究報告》顯示&#xff0c;2024年Q4企業郵箱用戶遭遇的釣魚郵件數量激增至…

3.使用ElementUI搭建側邊欄及頂部欄

1. 安裝ElementUI ElementUI是基于 Vue 2.0 的桌面端組件庫。使用之前&#xff0c;需要在項目文件夾中安裝ElementUI&#xff0c;在終端中輸入以下命令&#xff0c;進行安裝。 npm i element-ui -S并在main.js中引入ElementUI 2. 使用elmentUI組件進行頁面布局 2.1 清空原…

C++并發以及多線程的秘密

1.基礎概念 并發&#xff08;Concurrency&#xff09; 并發是指在同一時間段內&#xff0c;多個任務看起來像是同時執行的。并發并不一定意味著真正的同時執行&#xff0c;它可以是通過時間片輪轉等方式在多個任務之間快速切換&#xff0c;讓用戶感覺多個任務在同時進行。并發…

從零開始實現大語言模型(十四):高階訓練技巧

1. 前言 預訓練大語言模型的流程與訓練普通神經深度網絡模型本質上并沒有任何不同。可以使用深度學習實踐中已經被證明非常有效的高階訓練技巧&#xff0c;優化大語言模型預訓練流程&#xff0c;使大語言模型預訓練效率更高&#xff0c;訓練過程更穩定。 本文介紹深度學習領域…

利用EasyCVR平臺打造化工園區視頻+AI智能化監控管理系統

化工園區作為化工產業的重要聚集地&#xff0c;其安全問題一直是社會關注的焦點。傳統的人工監控方式效率低下且容易出現疏漏&#xff0c;已經難以滿足日益增長的安全管理需求。 基于EasyCVR視頻匯聚平臺構建的化工園區視頻AI智能化應用方案&#xff0c;能夠有效解決這些問題&…

GB28181視頻監控流媒體平臺LiveGBS如何自定義收流端口區間以便減少收流端口數或解決端口沖突問題

LiveGBS GB28181流媒體服務在接收視頻的時候默認是使用30000-30249&#xff0c; webrtc流播放端口區間默認是UDP的30250-30500區間。有些網絡環境不方便開放這么大的端口區間&#xff0c;下面介紹下如何修改配置這個區間。 從頁面上修改這個區間&#xff0c;端口區間盡量設置大…

Qt:事件

目錄 處理事件 鼠標事件 鍵盤事件 定時器事件 窗口事件 雖然 Qt 是跨平臺的 C 開發框架&#xff0c;Qt 的很多能力其實是操作系統提供的 只不過 Qt 封裝了系統的 API 事件 前面學習過信號槽&#xff1a; 用戶進行的各種操作&#xff0c;就可能會產生出信號&#xff0c;可以…

責任鏈模式:優雅處理復雜流程的設計藝術

引言 在軟件設計中&#xff0c;我們經常會遇到需要按特定順序處理請求的場景。例如&#xff0c;一個訂單處理系統可能需要經過驗證、付款、物流安排和客戶通知等多個步驟。如果我們將這些步驟硬編碼在一個方法中&#xff0c;代碼將變得臃腫且難以維護。這時&#xff0c;責任鏈…