Read temperature from Neje lasers?

I just swapped one of those neje 40W lasers on my primo, and was wondering if anyone has gotten the temperature reading to work (not with the included 7seg display)? If yes, then how did you implement it?

I found some tech docs that describe the protocol as 200baud serial 2hz data rate… also some info on bit order that has been used for soft serial reading in arduino. I figure since our firmwares are all arduino based, regardless of it is Marlin or grbl, reading data with a spare input should be pretty easy to do. Unfortunately I’m using grbl… guessing that will require some custom code to implement vs Marlin, but I think they both would use the same approach (same libs etc). If I was lucky, then someone else already posted a tutorial for this and I just haven’t found it yet.

(Edit: I am pretty sure there is little value reading temps would add as far as operating the laser either manually or with temp feedback. I am just ocding on it… the unused signal annoys me lol.)

What is the primary benefit of reading the temperature? Protecting/shutting down the diode if things are getting too hot?

I think that is what most ppl are using it for yes. I guess it could be taken further, with feedback to the controller to slow down the cut as it reaches max temp… or maybe just have it pause and cooldown before restarting where it left off.

(edit: I personally don’t have a real reason for doing more than just leaving the green wire disconnected on my module. The module did have a hefty price tag, but I guess as long as I follow advice of other users with experience operating the same module long term, then it will (fingers crossed) last long enough to be a good value.)

Adding an air assist without sealing the lens will help a lot to get temperature down as it will blow some more air on aluminium dissipator.
Depending on the pump/compressor you’ve got the air loss won’t be a problem on the burn quality.

The smaller Neje lasers just have a thermister that is used to supply temperature info…nothing so complicated as a data stream… A simple voltage divider to bring the output into the range required by an arduino analogue input pin and a bit of code would be all that is required, I remember posting a table of expected voltages against temperature in the dim and distant past but finding it now…not so easy. However…times move on! It appears that the later modules do in fact send a data stream, presumably to interface with their ‘control board module’ and its’ 7 segment displays. I found this post where someone was making progress!


As a matter of fact, the printer boards we use all have that. You need to figure out which thermistor it is though.

Yep, that’s similar to the reddit I found earlier… also mentioned using softserial since it’s 200baud. I’m thinking though if this hasn’t been fleshed out, it may be an acceptable workaround for me to just add a y-harness to my laser cable where I can plug in the 7-seg display to keep an eye on temps. At least then I’ll know if coding may become needed for doide longevity as summer temperatures arrive. Right now with the cold ambient, my non-contact thermometer is saying the heatsink is below 50C after a decently long cut at 100% power… but that’s a huge heatsink with lots of air flowing through. I’ve also seen posts about inadequate thermal paste and loose screws inside… may tear mine apart to be sure it’s assembled correctly, but need to get some baseline temps first.

I did actually see your design when I was looking for dkjflinux’s nozzle. I like how you kept airflow less restricted. The problem I have is I’m using my neje 40w in a mount I made that slides into a Bosch Colt mount. The fit is very tight, so there’s no room for a quick connect fitting in front like that.

For now I’m using dkjflinux’s original design, which I drilled to 1/4" to fit my airhose directly for a super compact fit. I figure the loss of cooling may be minimal since that area near the lens has not fins and is so far from the doides. I haven’t done any thermal analysis on it though, just sharing my thoughts from looking at the thermal design. Also one thing most of the designs have that I’d like to change, is options for nozzle length… be nice to have a shorter tip for those longer cuts.

Found it… 10K Friggin Lasers (Fan Control) - #11 by dart1280

1 Like

If it will help… here’s the Onshape design for my air-assist nozzles. It’s a bit disorganized but “sketch3” in the NEJE_40W_6.5mm (actually any version) can be readily modified to change to nozzle length, shape, and opening. It’s simply the nozzle cross-section that gets revolved thru 360 degrees.

Regards “finding” my Thingiverse air-assist “thing”… I created it but somehow was never able to get TV to let me set it “public” or show up in my list of “things”. I probably screwed it up somehow. Anyway, here it is…

– David


Thanks David, that’s actually the thing I printed hehe. I have a flow meter on my air assist line for use with my mister. So I use that to dial in 20mL/min, and it cuts the 1/8 birch ply clean as a whistle with your nozzle. Also, I just drilled out the air line part to fit snug on my 1/4 OD airhose. The fit is plenty secure since it’s tied from above with an elbow fitting.

I connected the included 7-segment display/controller to my primo laser, using just the 12v, gnd, and *C lines. After some testing and probing, I determined it 1) has somewhat inconvenient ways to display temperature when used with a cnc, and 2) all of the buttons are connected to a voltage ladder.

My Neje 40W module is wired to a relay to turn 12V power on/off, and also has to pwm control connected. So the laser is powered off until I start an operation on my gcode sender (or manually turn on the spindle with gcode). I also wired my Neje 7-seg board 12V to the output of the relay so it is off while I’m not running the laser. The way that Neje board works in this config, if no buttons are pressed when powered on, it shows “off”, then hitting “*C” momentarily shows the temp in [XXC] format. Letting go of the button shows “off” again. Alternatively, if I hold down the “*C” button before starting and operation, the display cycles up quickly from 0-333 or so, then displays temperature after letting go of the button. This way, at least I can see temps throughout a cut without pressing anything, but it is not what I’d call convenient to use. Adding a circuit to handle holding the button down on bootup would work (and is not hard knowing it’s a volt divider), but that probably more complicated than just programing an Arduino board, which is already quite a bit for this lol.

Bottom line for me, at the end of a longish 8 minute cut running 100% the whole time with a garage ambient of 58F, the displayed temp maxed out at 38C. Unfortunately doing the math when my garage hits near 100F during summer, my displayed temp should be a bit over the recommended max 60C. So I will have to keep a pulse on temps as my ambient starts to climb. If the fan doesn’t kick in and save the day (it has lots of overhead based on boot up RPM), then I’ll have to see what I can do to help it along.

1 Like

Here are some things I made to support the Neje 40W on my Primo:

The temp display is working out OK I guess. An arduino with a small display would be better, and I already have all the parts I need to make one, but real life isn’t leaving me enough time to play lately. I’ll probably revisit this when my time frees up and make something with a promini and OLED display. That will probably be a tad larger than the stock tester board, but well worth it for long term cnc pleasure I think. Besides having a more legible display, I can also do things like max temp alarms etc… maybe later on add some output to grbl so it can drop feedrate to keep temps in check (always on the lookout for a way to use the spare IO on my GRBL 6-pack board hehe).


I stumbled over this thread while searching for a solution to read temp data from my neje laser with the marlin firmware.
I was able to read the temp data from an external Arduino Nano and print it to my PC via Serial.
The very basic code: read neje laser temp via arduino -

The next step would be to integrate this “temp sensor” in Marlin. But this is a to complex step for me.

Maybe this gives some inspiration to develop a suitable solution.


Awesome, thanks for the info. I think I got the gist to be able to use this on a custom project anyways; read temp in C from byte 4 out of 7, at 200baud, starting with 0xFF, with a ~500msec refresh period. Integrating a softserial temp sensor has been done many times in marlin, but also out of my league. You might try posting a feature request on the marlin github containing the info you know. I’m curious to see if/how it would end up being implemented. Like just an optional LCD display, or like pwm and feedrate throttling to limit diode temp? The latter application seems very worthy of development hours IMHO.