摘要:將信號(hào)拉高激活打印元件,接著使步進(jìn)電機(jī)轉(zhuǎn)動(dòng)兩步完成一點(diǎn)行的打印。步進(jìn)電機(jī)的步長為,一點(diǎn)行的寬度為,因此打印出一點(diǎn)行的數(shù)據(jù)需要步進(jìn)電機(jī)轉(zhuǎn)兩步。由于步進(jìn)電機(jī)和熱敏頭不能長時(shí)間連續(xù)工作,因此打印份數(shù)不宜設(shè)置過多,否則容易燒壞電機(jī)和熱敏頭。
簡(jiǎn)介:利用Wi-Fi&BLE云模組讓普通打印機(jī)實(shí)現(xiàn)App端輸入文字即可實(shí)時(shí)&遠(yuǎn)程打印。
基本打印流程:
(1)用戶通過涂鴉App完成設(shè)備配網(wǎng)。
(2)將需要打印的文字或者簡(jiǎn)單圖片輸入文本框。
(3)輸入完成后APP將文本框中的內(nèi)容全部轉(zhuǎn)換成bmp單色位圖存儲(chǔ)到云端,并將圖片的url給到App。
(4)分別將第一段url和第二段url下發(fā)到設(shè)備,設(shè)備端將url拼接。
(5)設(shè)置打印份數(shù)后點(diǎn)擊開始打印。
(6)設(shè)備收到打印命令后訪問url,下載圖片到模組后開始打印。
(7)返回打印結(jié)果(成功/失敗)。
功能名稱 | 功能詳解 |
---|---|
打印份數(shù) | 設(shè)置具體要打印的份數(shù),默認(rèn)一份 |
生成第一段鏈接 | APP生成的圖片會(huì)存儲(chǔ)到云端,以u(píng)rl形式給到設(shè)備,url長度超過255個(gè)字節(jié),由于IoT平臺(tái)string類型DP最多只能容納255個(gè)字節(jié),因此需要兩個(gè)DP |
生成第二段鏈接 | 將得到的兩組url拼接成完整的url,設(shè)備訪問該url將圖片下載到模組 |
開始打印 | 設(shè)置好打印份數(shù),下發(fā)打印命令,設(shè)備開始打印 |
正在打印份數(shù) | 根據(jù)設(shè)置的打印份數(shù),設(shè)備會(huì)上報(bào)當(dāng)前正在打印的份數(shù)在APP顯示 |
缺紙報(bào)警 | 檢測(cè)到打印機(jī)無紙時(shí)無法打印,并上報(bào)缺紙狀態(tài)到APP |
電量顯示 | 電量以10%間隔顯示在APP |
低電量報(bào)警 | 電量在低于10%時(shí)APP電量報(bào)警 |
打印結(jié)果 | |
打印狀態(tài) | 打印成功、打印失敗(缺紙、電池電量不足、圖片拉去失敗) |
(1)開發(fā)環(huán)境搭建可以參考Wi-Fi 模組二次開發(fā)教程——1. SoC開發(fā)環(huán)境搭建。如果已經(jīng)有虛擬機(jī)和烏班圖的開發(fā)環(huán)境可直接跳至4.2 下載編譯依賴工具
處進(jìn)行剩余環(huán)境搭建。
(2)產(chǎn)品創(chuàng)建可以參考Wi-Fi模組二次開發(fā)教程——2. 涂鴉IoT平臺(tái)介紹。由于IoT平臺(tái)品類中沒有打印機(jī),所以選擇找不到品類?。默認(rèn)自定義方案,填入產(chǎn)品名稱和產(chǎn)品型號(hào),通訊協(xié)議默認(rèn)Wi-Fi&藍(lán)牙,創(chuàng)建產(chǎn)品后添加所需的功能點(diǎn)。
功能點(diǎn)定義完成后選擇設(shè)備面板為自由配置面板,其他步驟均可參考Wi-Fi模組二次開發(fā)教程——2. 涂鴉IoT平臺(tái)介紹完成產(chǎn)品創(chuàng)建。
(3)參考Wi-Fi模組二次開發(fā)課程——3. 快速上手來完成代碼修改編譯、固件上傳、獲取token、燒錄授權(quán)和設(shè)備配網(wǎng)。
打印是打印機(jī)最重要的功能點(diǎn),其他所有的功能點(diǎn)都是在此基礎(chǔ)上實(shí)現(xiàn)的。通過步進(jìn)電機(jī)和熱敏頭的協(xié)同工作來實(shí)現(xiàn)字符和圖片的打印。
打印頭與涂鴉Wi-Fi&BLE雙模模組之間通過SPI進(jìn)行數(shù)據(jù)通信,具體打印步驟為:
(1)模組每次向熱敏頭發(fā)送48位數(shù)據(jù)。
(2)熱敏頭接收到數(shù)據(jù)后在CLK信號(hào)的上升沿將數(shù)據(jù)傳輸?shù)揭莆患拇嫫鳌?br /> (3)一行(48位)數(shù)據(jù)傳輸完成后將/LAT信號(hào)拉低緊接著拉高把數(shù)據(jù)存儲(chǔ)到鎖存寄存器中。
(4)將DST信號(hào)拉高激活打印元件,接著使步進(jìn)電機(jī)轉(zhuǎn)動(dòng)兩步完成一點(diǎn)行的打印。
(5)在電機(jī)轉(zhuǎn)過兩步后要及時(shí)將DST信號(hào)拉低,長時(shí)間加熱會(huì)損壞加熱元件甚至冒煙。
步進(jìn)電機(jī)的步長為0.01325mm,一點(diǎn)行的寬度為0.0625mm,因此打印出一點(diǎn)行的數(shù)據(jù)需要步進(jìn)電機(jī)轉(zhuǎn)兩步。DST信號(hào)激活頻率為步進(jìn)電機(jī)每轉(zhuǎn)兩步激活一次。
打印時(shí)序圖如下:
步進(jìn)電機(jī)時(shí)序圖如下:
打印功能部示例代碼:
/*** @function:set_motor_phases* @brief: set motor phases* @param[in]: phase[4]* @return: none*/STATIC VOID set_motor_phases(CONST UINT8_T phase[4]){ tuya_gpio_write(PH1, phase[0]); tuya_gpio_write(PH2, phase[1]); tuya_gpio_write(PH3, phase[2]); tuya_gpio_write(PH4, phase[3]);}/*** @function:idle_motor* @brief: idel status no power consumption* @param[in]: none* @return: none*/VOID idle_motor(VOID){ if (isIdle) { return; } CONST UINT8_T idle_phase[] = {0, 0, 0, 0}; set_motor_phases(idle_phase); isIdle = TRUE;}/*** @function:set_motor_step* @brief: * @param[in]: none* @return: none*/VOID set_motor_step(VOID) { isIdle = false; CONST INT_T totalSteps = ARRAY_SIZE; currStep = (currStep + totalSteps + 1) % totalSteps; set_motor_phases(motor_phases[currStep]);}/*** @function:tuya_motor_feedPaper_line* @brief: Feed paper for `count` lines* @param[in]: count -> print line num* @param[in]: direction: FORWARD->forward BACKWARD->backward* @param[in]: speed: Adjust the motor speed unit:ms* @return: none*/VOID tuya_motor_feedPaper_line(UINT_T count, INT8_T direction, UINT8_T speed){ INT_T i; /* out of paper or cuont num is 0 return */ if (1 == tuya_TmlHead_out_of_paper_alarm() || 0 == count) { return; } CONST UINT_T stepsPerLine = ARRAY_SIZE / 2; for (i = 0; i < (stepsPerLine * count); i++) { tuya_motor_set_motor_step(direction); tuya_hal_system_sleep(speed); // delay 2ms unit:ms }}/*** @function:begin_print_line* @brief: send 1bpp data to printhead and begin heating* @param[in]: data -> The data to be printed* @return: none*/STATIC VOID begin_print_line(UINT8_T* data){ if (1 == out_of_paper_alarm()) { return; } bk_spi_master_dma_send(&g_spi_msg); tuya_hal_system_sleep(5); tuya_gpio_write(PRINT_DST, FALSE); tuya_gpio_write(PRINT_LAT, FALSE); tuya_gpio_write(PRINT_LAT, TRUE); tuya_gpio_write(PRINT_DST, TRUE);}/*** @function:end_printLine* @brief:end heating * @param[in]: none* @return: none*/STATIC VOID end_printLine(VOID){ tuya_gpio_write(PRINT_DST, FALSE);}/*** @function: print_1bLine* @brief: Print one line of data* @param[in]: data -> Data to be printed* @return: none*/STATIC VOID print_1bLine(UINT8_T* data){ if (1 == out_of_paper_alarm()) { return; } begin_print_line(data); motor_feedPaper_line(1, FORWARD, 2); // The actual number of steps is 2*Param end_printLine(); }
要合理控制步進(jìn)電機(jī)送紙速度,速度過快容易走不動(dòng)紙,速度過慢加熱頭會(huì)對(duì)熱敏紙同一個(gè)點(diǎn)長時(shí)間加熱使熱敏紙顏色由黑變灰甚至變白,影響打印效果。
打印份數(shù)默認(rèn)打印一份,在APP上設(shè)置參數(shù)可調(diào)整打印份數(shù)。由于步進(jìn)電機(jī)和熱敏頭不能長時(shí)間連續(xù)工作,因此打印份數(shù)不宜設(shè)置過多,否則容易燒壞電機(jī)和熱敏頭。
由于平臺(tái)受限,url長度超過255個(gè)字節(jié),string類型DP最多只能容納255個(gè)字節(jié),因此需要兩個(gè)DP。url在代碼中本質(zhì)為字符串。APP將兩端url下發(fā)到設(shè)備后再將得到的兩組url拼接成完整的url,設(shè)備訪問該url將圖片下載到模組。
case PRINT_NUM_DPID: bmp_info.paper_num = root->value.dp_value; break; case CREATE_LINK1_DPID: memset (bmp_info.first_url, 0, 255); memcpy(bmp_info.first_url, root->value.dp_str, strlen(root->value.dp_str)); break; case CREATE_LINK2_DPID: memset (bmp_info.second_url, 0, 255); memcpy(bmp_info.second_url, root->value.dp_str, strlen(root->value.dp_str)); break;
設(shè)備收到打印命令后訪問url下載圖片到模組后開始打印。由于模組RAM有限,剩余空間只有40k左右,而需要打印的圖片很可能超過了40k,因此采用一邊拉取部分圖片一邊打印的方式完成打印。打印份數(shù)bmp_info.paper_num
控制for循環(huán)的次數(shù),bmp_info.print_num
即為當(dāng)前正在打印的份數(shù),將print_num
實(shí)時(shí)上報(bào)到APP即可顯示當(dāng)前正在打印的份數(shù)。
開始打印部分代碼:
CHAR_T *image_url = (CHAR_T *)malloc(512*sizeof(CHAR_T)); strcpy(image_url, "https://storage-proxy.tuyacn.com:7779/dst="); tuya_hal_semaphore_wait(pv_handle); strcat(image_url, bmp_info.first_url); strcat(image_url, bmp_info.second_url); for (bmp_info.print_num = 0; bmp_info.print_num < bmp_info.paper_num; bmp_info.print_num++) { iot_httpc_download_file(image_url, PULL_SIZE, iot_download_image_cb, NULL, bmp_info.total_len, file_hmac); tuya_bmp_print_num_update(++bmp_info.print_num); }
打印機(jī)內(nèi)部采用一個(gè)反射性光電通斷偵測(cè)傳感器,當(dāng)缺紙時(shí),光電偵測(cè)發(fā)出的光無法被反射,輸出高電平。當(dāng)紙張正常,光電偵測(cè)發(fā)出的光被反射,由接收管接收,輸出低電平。將輸出的電平值實(shí)時(shí)上報(bào)到APP。當(dāng)缺紙時(shí),不能啟動(dòng)加熱頭和電機(jī)。
缺紙檢測(cè)部分代碼:
/** * @function: out_of_paper_alarm * @brief: detection printer have paper * @param: none * @return: ALARM-->out of paper NORMAL-->have a paper * @others: none */UCHAR_T out_of_paper_alarm(VOID){ if (NO_PAPER == tuya_gpio_read(PAPER_SENSOR)) { return PAPER_ALARM; } else { return PAPER_NORMAL; }} dp_arr[2].dpid = OUT_OF_PAPER_DPID; dp_arr[2].type = PROP_BOOL; dp_arr[2].time_stamp = 0; dp_arr[2].value.dp_bool = out_of_paper_alarm();
打印機(jī)采用7.4v可充電鋰電池供電,采用ADC采集電池端的電壓,顯示10%、20%、…、90%、100%電量值,當(dāng)電池電壓等于10%時(shí)上報(bào)APP,并且紅燈亮起,提醒用戶充電。大于10%時(shí)綠燈常亮。該任務(wù)放在多帶帶的線程中每3s采集一次電池電壓,并上報(bào)電量值。
ADC_ELECTRICITY
處分壓后電壓為2.1v。
部分示例代碼:
/*** @function:tuya_BatMon_BatStatus* @brief: Battery level display* @param[in]: none* @return: none*/VOID tuya_BatMon_BatStatus(VOID){ UINT16_T battery_val = 0; BOOL_T bat_alarm = 0; while (1) { battery_val = tuya_BatMon_BatVal_get(2400, 4096, 4, 400); if (battery_val <= precent_10) { bat_alarm = 1; tuya_BatMon_ch443k_toggle(BAT_LED_PIN, FALSE); tuya_gpio_write(BAT_LED_PIN, FALSE); } else { bat_alarm = 0; tuya_BatMon_ch443k_toggle(BAT_LED_PIN, TRUE); tuya_gpio_write(BAT_LED_PIN, TRUE); } if (battery_val >= precent_100) { vlotage_percent = _100p; } else if (battery_val < precent_100 && battery_val >= precent_90) { vlotage_percent = _90p; } else if (battery_val < precent_90 && battery_val >= precent_80) { vlotage_percent = _80p; } else if (battery_val < precent_80 && battery_val >= precent_70) { vlotage_percent = _70p; } else if (battery_val < precent_70 && battery_val >= precent_60) { vlotage_percent = _60p; } else if (battery_val < precent_60 && battery_val >= precent_50) { vlotage_percent = _50p; } else if (battery_val < precent_50 && battery_val >= precent_40) { vlotage_percent = _40p; } else if (battery_val < precent_40 && battery_val >= precent_30) { vlotage_percent = _30p; } else if (battery_val < precent_30 && battery_val >= precent_20) { vlotage_percent = _20p; } else { vlotage_percent = _10p; } /* Voltage detection frequency */ tuya_hal_system_sleep(CKECK_TIME); tuya_update_Bat_Val_dp(bat_alarm); }}
e if (battery_val < precent_50 && battery_val >= precent_40) {
vlotage_percent = _40p;
} else if (battery_val < precent_40 && battery_val >= precent_30) {
vlotage_percent = _30p;
} else if (battery_val < precent_30 && battery_val >= precent_20) {
vlotage_percent = _20p;
} else {
vlotage_percent = _10p;
}
/* Voltage detection frequency */ tuya_hal_system_sleep(CKECK_TIME); tuya_update_Bat_Val_dp(bat_alarm);} }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/119772.html
摘要:輸入輸出,非常適用于消費(fèi)類電子產(chǎn)品,如便攜式個(gè)人媒體播放器和便攜式系統(tǒng),為確保對(duì)高容量鋰離子電池的可靠充電,這些全集成充電管理控制器在一個(gè)單芯片上集成了一些關(guān)鍵的標(biāo)準(zhǔn)充電管理和安全功能。 輸入9V-12V輸出8.4V1.5A雙節(jié)鋰電池充電芯片平板電腦MID 智能MID 便捷式MID 1A-1...
摘要:當(dāng)互聯(lián)網(wǎng)概念在中國資本市場(chǎng)上方興未艾之時(shí),互聯(lián)網(wǎng)巨頭谷歌公司的執(zhí)行董事長埃里克施密特在前段時(shí)間舉行的座談會(huì)上大膽預(yù)言互聯(lián)網(wǎng)即將消失,一個(gè)高度個(gè)性化互動(dòng)化的有趣世界物聯(lián)網(wǎng)即將誕生。他說我可以非常直接地說,互聯(lián)網(wǎng)將消失。 當(dāng)互聯(lián)網(wǎng)概念在中國資本市場(chǎng)上方興未艾之時(shí),互聯(lián)網(wǎng)巨頭谷歌公司的執(zhí)行董事長埃里克?施密特在前段時(shí)間舉行的座談會(huì)上大膽預(yù)言:互聯(lián)網(wǎng)即將消失,一個(gè)高度個(gè)性化、互動(dòng)化的有趣世界——物聯(lián)...
摘要:馬斯克呼吁對(duì)人工智能進(jìn)行監(jiān)管,并警告說這種技術(shù)可能會(huì)造成獨(dú)裁者并引發(fā)第三次世界大戰(zhàn)。,谷歌最近并不太平。目前,雙方正在聯(lián)合承辦的比賽。 AI行業(yè)動(dòng)態(tài) 1,新浪美股訊,北京時(shí)間5月28日晚間,據(jù)外媒消息,IBM沃森和云高級(jí)副總裁大衛(wèi)肯尼表示,人工智能已經(jīng)證明是有益的。特斯拉首席執(zhí)行官馬斯克等發(fā)出的末日警告有些言過其實(shí)。它使網(wǎng)絡(luò)變得更加安全,幫助醫(yī)生護(hù)士和病人更好地找到醫(yī)療保健方式,幫助人...
摘要:亞馬遜人工智能語音助手技能超過萬個(gè),全球各主要硬件廠商紛紛搭載或兼容,使得其亞馬遜助手無處不在。物聯(lián)網(wǎng)設(shè)備透過云端實(shí)現(xiàn)跨行業(yè)和跨設(shè)備互聯(lián)互通,所收集數(shù)據(jù)除了在邊緣側(cè)處理,還需要上傳至云端,云端作為數(shù)據(jù)集散地,各種數(shù)據(jù)經(jīng)過云端AI處理后,對(duì)這些數(shù)據(jù)利用將會(huì)帶來新的商業(yè)模式。在物聯(lián)網(wǎng)資深專家楊劍勇看來,云計(jì)算是全球物聯(lián)網(wǎng)重要基礎(chǔ)設(shè)施,作為物聯(lián)網(wǎng)產(chǎn)業(yè)發(fā)展基石,聚集了亞馬遜、微軟、谷歌和BAT等重量...
摘要:財(cái)富管理專場(chǎng)上,螞蟻金服微貸事業(yè)群高級(jí)前端技術(shù)專家王卓做了主題為螞蟻微貸互動(dòng)營銷技術(shù)體系實(shí)踐的精彩分享。通過互動(dòng)技術(shù),最終實(shí)現(xiàn)拉新,留存和促活等目標(biāo)。營銷技術(shù)方案對(duì)接研發(fā)平臺(tái),通過鳳蝶系統(tǒng)和研發(fā)管理體系進(jìn)行打通。 摘要:以數(shù)字金融新原力(The New Force of Digital Finance)為主題,螞蟻金服ATEC城市峰會(huì)于2019年1月4日上海如期舉辦。財(cái)富管理專場(chǎng)上,螞...
閱讀 858·2021-11-15 17:58
閱讀 3659·2021-11-12 10:36
閱讀 3795·2021-09-22 16:06
閱讀 971·2021-09-10 10:50
閱讀 1333·2019-08-30 11:19
閱讀 3317·2019-08-29 16:26
閱讀 949·2019-08-29 10:55
閱讀 3351·2019-08-26 13:48